通过编辑区电路图观察并记录八只信号灯的控制规律与设计是否相符。同时通过观察窗口观察延时子程序中所用的工作寄存器的值在调试过程中的变化规律。程序仿真窗口如图3-6所示。
图3-6 程序仿真窗口
七、实验分析与总结
1. 分析P1口8个管脚电平状态与对应的发光二极管亮灭状态之间的关系。 2. 找出控制P1口管脚电平状态的指令。 3. 找出控制时间长短的指令。
八、思考题
1. 如何改变发光二极管亮灭的间隔时间,使闪亮速度更快或更慢一些? 2. 你能再设计出几种不同的控制状态吗?(从中间到两边)
2.3 汽车转向信号灯控制实验
一、实验目的
1.掌握多分支程序的设计方法。
2.掌握用分支程序编程控制汽车转向信号灯的方法。 3. 掌握用Proteus调试汇编源程序的方法。
二、实验内容
P1口做输出口控制汽车转向信号灯,用P3口做输入口接五只控制开关,设计一个汽车转向信号灯控制系统。晶振频率6MHz。具体要求如下:
(1) 正常驾驶时,接通左转弯开关,左转弯灯、左头灯、左尾灯同时闪烁;接通右转弯开关,右转弯灯、右头灯、右尾灯同时闪烁,闪烁频率为1Hz。
(2) 刹车时,接通刹车开关,左尾灯、右尾灯同时亮。
(3) 停靠站时,接通停靠开关,左头灯、右头灯、左尾灯、右尾灯同时闪烁,闪烁频率为1Hz。
(4) 出现紧急情况时,接通紧急开关,左转弯灯、右转弯灯、左头灯、右头灯、左尾灯、右尾灯同时闪烁,闪烁频率为5Hz。
三、实验参考电路
假设P1口输出低电平时灯被点亮,实验时可用发光二极管替代灯;假设控制开关输出低电平有效,控制开关的信号通过P3口送入单片机,控制开关与P3口各管脚的对应关系如表3-2所示。汽车转向信号灯控制电路图如图3-8所示。根据硬件接线可推导出控制状态与P1口的控制码的对应关系,如表3-3所示。
3-2 控制开关与P3口各管脚的对应关系表 P3口管脚 控制状态 P3.7 P3.6 P3.5 P3.4 紧急 P3.3 停靠 P3.2 刹车 P3.1 右转弯 P3.0 左转弯
3-3 控制状态与P1口控制码的信号灯的对应关系表
控制 状态 左转弯 右转弯 刹车 停靠 紧急 P1口 控制码 57H ABH F3H C3H 03H P1.7 左转弯灯 0 1 1 1 0 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 1 1 1 1 1 1 1 1 1 1 右转弯灯 左头灯 右头灯 1 0 1 1 0 0 1 1 0 0 1 0 1 0 0 左尾灯 右尾灯 0 1 0 0 0 1 0 0 0 0 C130pFX1C230pF19U1XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617SW-SPSTC310uFR7CRYSTAL10k18XTAL29RSTR1330R2330R3330R4330R5330R6330293031PSENALEEAD5LED-REDD6LED-REDR810kR910kR1010kR1110kR1210kD3LED-GREEND4LED-GREEN12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51SW1SW2SW3SW4SW5D1LED-YELLOWD2LED-YELLOW 图3-8 汽车转向信号灯控制实验电路
四、实验参考程序
地址 0000H 0030H 0033H 0035H 0038H 003BH 003EH 0041H 0044H 0046H 0049H 004CH 004FH 0052H 0054H 0057H 005AH 005DH 0060H 0062H 0065H 0068H 006BH 006DH 0070H 0073H 0076H 0079H 007BH 007EH 机器码 02 00 30 75 B0 FF E5 B0 30 E4 0E 30 E3 19 30 E2 24 30 E1 2C 30 E0 37 80 EA 75 90 03 12 01 00 75 90 FF 12 01 00 80 DC 75 90 C3 12 02 00 75 90 FF 12 02 00 80 CE 75 90 F3 12 02 00 75 90 FF 80 C0 75 90 AB 12 02 00 75 90 FF 12 02 00 80 B5 75 90 57 12 02 00 程序 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV P3,#0FFH MOV A,P3 JNB ACC.4,JJ JNB ACC.3,TK JNB ACC.2,SC JNB ACC.1,YZW JNB ACC.0,ZZW SJMP MAIN JJ: MOV P1,#03H LCALL DELAY1 MOV P1,#0FFH LCALL DELAY1 SJMP MAIN TK: MOV P1,#0C3H LCALL DELAY2 MOV P1,#0FFH LCALL DELAY2 SJMP MAIN SC: MOV P1,#0F3H LCALL DELAY2 MOV P1,#0FFH SJMP MAIN YZW: MOV P1,#0ABH LCALL DELAY2 MOV P1,#0FFH LCALL DELAY2 SJMP MAIN ZZW: MOV P1,#57H LCALL DELAY2 注释 ;读P3口输入数据 ;ACC.4=0,转移到紧急状态 ;ACC.3=0,转移到停靠状态 ;ACC.2=0,转移到刹车状态 ;ACC.1=0,转移到右转弯状态 ;ACC.0=0,转移到左转弯状态 ;紧急状态 ;0.1s延时 ;信号灯全灭 ;停靠状态 ;0.5s延时 ;信号灯全灭 ;刹车状态 ;0.5s延时 ;信号灯全灭 ;右转弯状态 ;0.5s延时 ;信号灯全灭 ;左转弯状态 ;0.5s延时 0081H 0084H 0087H 0100H 0102H 0104H 0105H 0107H 0109H 0200H 0202H 0204H 0206H 0207H 0209H 020BH 020DH 75 90 FF 12 02 00 80 A7 7B 64 7A F8 00 DA FE DB F9 22 7C 05 7B 64 7A F8 00 DA FE DB F9 DC F5 22 DELAY1: DEL1: DEL2: DELAY2: DEL3: DEL4: DEL5: MOV P1,#0FFH LCALL DELAY2 SJMP MAIN ORG 0100H MOV R3,#100 MOV R2,#248 NOP DJNZ R2,DEL2 DJNZ R3,DEL1 RET ORG 0200H MOV R4,#5 MOV R3,#100 MOV R2,#248 NOP DJNZ R2,DEL5 DJNZ R3,DEL4 DJNZ R4,DEL3 RET END ;信号灯全灭 ;0.1s延时子程序 ;0.1s循环次数 ;1ms循环次数 ;子程序返回 ;0.5s延时子程序 ;0.5s循环次数 ;100ms循环次数 ;1ms循环次数 ;子程序返回 五、实验步骤
1. 新建设计文件、设置图纸尺寸、设置网格、保存设计文件。文件名为“bus”。 2. 选取元器件。从Proteus元器件库中选取元器件:AT89C51(单片机)、CRYSTAL(晶振)、CAP(电容)、CAP-ELEC(电解电容)、RES(电阻)、LED-YELLOW(黄色发光二极管)、LED-GREEN(绿色发光二极管)、LED-RED(红色发光二极管)、SW-SPST(单刀单掷开关)。
3. 放置元器件、编辑元器件、放置终端、连线。按图3-8所示放置元器件并连线。 4. 设置元器件属性并进行电气规则检测。先右击再单击各元器件,按图3-8所示设置元器件的属性值。单击 “工具”→“电气规则检查”,完成电气检测。
5. 添加源程序、编辑源程序、编译源程序。源文件名为“bus.asm”。 6. 加载目标代码文件。 “Clock Frequency”栏中的频率要设为6MHz。 7. 仿真。单击仿真工具栏“运行”按钮,单片机全速运行程序。拨动控制开关SW1~SW5,观察并记录六只信号灯的控制规律。
六、实验分析与总结
1. 分析主程序中JNB指令的作用。
2. 分析控制开关与汽车信号灯的对应关系。若同时有两个或两个以上开关输出信号有效,此时程序应执行哪一个分支程序?
实验3 中断和定时器实验
一、 实验目的: