赞
踩
本篇文章为本人于单片机实验课的汇编程序项目代码整理,如有错误欢迎批评指正。
实验目的:
1、理解单片机综合训练平台上的发光二极管和蜂鸣器原理图;
2、熟悉并理解发光二极管和蜂鸣器原理,并实现对发光二极管和蜂鸣器的编程控制;
3、编程实现对发光二极管和蜂鸣器的控制。
实现功能:
实现了五种方式的花样灯(具体如下),每次花样灯结束后蜂鸣器发出不同的滴滴提示音:
1、方式一:单个LED灯由左至右亮灭,循环两个周期,结束后蜂鸣器短响一次;
2、方式二:单个LED灯由右至左亮灭,循环两个周期,结束后蜂鸣器短响两次;
3、方式三:LED灯由左至右逐渐全部点亮,循环两个周期,结束后蜂鸣器长响一次;
4、方式四:LED灯由左至右逐渐全部熄灭,循环两个周期,结束后蜂鸣器长响两次;
5、方式一:奇偶位LED交替闪烁,结束后蜂鸣器短响三次后长响一次。
具体代码:
- ORG 0000H
- AJMP MAIN;
- ORG 0030H;
- MAIN:
- MOV P2,#0A0H; ;关闭蜂鸣器
- MOV P0,#00H;
- MOV P2,#00H;
-
- LOOP1BE:
- MOV R4, #10H ;设置计数器的初始值
- MOV A,#0FEH ;设置LED初始亮位
- LOOP1: ;花样灯方式一
- MOV P2, #80H ;选择LED功能
- MOV P0, A ;LED位赋值
- ACALL DELAY ;调用延时子程序
- MOV P2, #00H ;初始化P2端口
- RL A ;左移一位
- DJNZ R4, LOOP1 ;计数器递减,如果不为零则继续循环
- BEEP1: ;蜂鸣器方式一:短响一次
- MOV P2, #0A0H
- SETB P0.6 ;打开蜂鸣器
- ACALL DELAY ;调用延时子程序
- CLR P0.6 ;关闭蜂鸣器
-
- LOOP2BE:
- MOV R4, #10H ;设置计数器的初始值
- MOV A,#7FH ;设置LED初始亮位
- LOOP2: ;花样灯方式二
- MOV P2, #80H
- MOV P0, A
- ACALL DELAY
- MOV P2, #00H
- RR A ;右移一位
- DJNZ R4, LOOP2 ;计数器递减,如果不为零则继续循环
- BEEP2: ;蜂鸣器方式二:短响两次
- MOV P2, #0A0H
- SETB P0.6
- ACALL DELAY
- CLR P0.6
- ACALL DELAY
- SETB P0.6
- ACALL DELAY
- CLR P0.6
-
- LOOP3BE:
- MOV R4, #10H ;设置计数器的初始值
- MOV DPTR,#TAB1
- LOOP3: ;花样灯方式三
- MOV P2, #80H
- MOVC A,@A+DPTR ;顺序读取码表
- MOV P0, A
- ACALL DELAY
- MOV P2, #00H
- INC DPTR
- CLR A ;初始化寄存器A
- DJNZ R4, LOOP3 ;计数器递减,如果不为零则继续循环
- BEEP3: ;蜂鸣器方式三:长响一次
- MOV P2, #0A0H
- SETB P0.6
- ACALL DELAY
- ACALL DELAY
- ACALL DELAY
- CLR P0.6
-
- LOOP4BE:
- MOV R4, #10H ;设置计数器的初始值
- MOV DPTR,#TAB2
- LOOP4: ;花样灯方式四
- MOV P2, #80H
- MOVC A,@A+DPTR ;顺序读取码表
- MOV P0, A
- ACALL DELAY
- MOV P2, #00H
- INC DPTR
- CLR A ;初始化寄存器A
- DJNZ R4, LOOP4 ;计数器递减,如果不为零则继续循环
- BEEP4: ;蜂鸣器方式四:长响两次
- MOV P2, #0A0H
- SETB P0.6
- ACALL DELAY ;调用延时子程序使蜂鸣器长响
- ACALL DELAY
- ACALL DELAY
- CLR P0.6
- ACALL DELAY
- SETB P0.6
- ACALL DELAY
- ACALL DELAY
- ACALL DELAY
- CLR P0.6
-
- LOOP5BE:
- MOV R4, #10H ;设置计数器的初始值
- MOV A,#0AAH;
- LOOP5: ;花样灯方式五
- MOV P2, #80H
- MOV P0, A
- ACALL DELAY
- MOV P2, #00H
- RR A
- DJNZ R4, LOOP5 ;计数器递减,如果不为零则继续循环
- JMP BEEP5
- BEEP5: ;蜂鸣器方式五:短响三次后长响一次
- MOV P2, #0A0H
- SETB P0.6
- ACALL DELAY
- CLR P0.6
- ACALL DELAY
- SETB P0.6
- ACALL DELAY
- CLR P0.6
- ACALL DELAY
- SETB P0.6
- ACALL DELAY
- CLR P0.6
- ACALL DELAY
- SETB P0.6
- ACALL DELAY
- ACALL DELAY
- ACALL DELAY
- CLR P0.6
- AJMP LOOP1BE
-
- ;码表一,循环至全亮功能
- TAB1:DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H
- ;码表二,循环至全灭功能
- TAB2:DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH
-
- DELAY: MOV R5,#04H ;将立即数传给寄存器 R5
- F3: MOV R6,#0FFH
- F2: MOV R7,#0FFH
- F1: DJNZ R7,F1 ;若为 0 程序向下执行,若不为 0 程序跳转到
- DJNZ R6,F2
- DJNZ R5,F3
- RET
- END
实验目的:
1、 熟悉数码管原理图,掌握数码管段码与显示之间的关系;
2、掌握共阳数码管的控制方式,能编程实现数码管段选和位选;
3、编程实现数码管的静态显示和动态显示。
实现功能:
1、在数码管1~8位上显示0~7数字。
具体代码:
- ORG 0000H
- LJMP MAIN;
- ORG 0030H;
- MAIN:
- MOV P2,#0A0H ;关闭蜂鸣器和LED
- MOV P0,#00H
- MOV P2,#80H
- MOV P0,#0FFH
- LOOP:
- MOV P2,#0C0H
- MOV P0,#01H ;数码管第1位
- MOV P2,#0E0H
- MOV P0,#0C0H ;显示0
- ACALL DELAY ;调用延时程序
-
- MOV P2,#0C0H
- MOV P0,#02H ;数码管第2位
- MOV P2,#0E0H
- MOV P0,#0F9H ;显示1
- ACALL DELAY
-
- MOV P2,#0C0H
- MOV P0,#04H ;数码管第3位
- MOV P2,#0E0H
- MOV P0,#0A4H ;显示2
- ACALL DELAY
-
- MOV P2,#0C0H
- MOV P0,#08H ;数码管第4位
- MOV P2,#0E0H
- MOV P0,#0B0H ;显示3
- ACALL DELAY
-
- MOV P2,#0C0H
- MOV P0,#10H ;数码管第5位
- MOV P2,#0E0H
- MOV P0,#99H ;显示4
- ACALL DELAY
-
- MOV P2,#0C0H
- MOV P0,#20H ;数码管第6位
- MOV P2,#0E0H
- MOV P0,#92H ;显示5
- ACALL DELAY
-
- MOV P2,#0C0H
- MOV P0,#40H ;数码管第7位
- MOV P2,#0E0H
- MOV P0,#82H ;显示6
- ACALL DELAY
-
- MOV P2,#0C0H
- MOV P0,#80H ;数码管第8位
- MOV P2,#0E0H
- MOV P0,#0F8H ;显示7
- ACALL DELAY
-
- AJMP LOOP ;循环显示
-
- DELAY: MOV R5,#01H ;延时功能
- F3: MOV R6,#0FH
- F2: MOV R7,#0FH
- F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到
- DJNZ R6,F2
- DJNZ R5,F3
- RET
- END
实验目的:
1、熟悉按键原理图;
2、在理解按键原理图的基础上,汇编编程实现按键控制发光二极管、蜂鸣器和数码管的功能。
实现功能:
1、按键S7按下,LED1点亮;
2、按键S6按下,计数加一,并将计数值显示在数码管首位;
3、按键S5按下,蜂鸣器响起;
4、按键S4按下,实现一个周期的流水灯。
具体代码:
- ORG 0000H
- AJMP MAIN
- ORG 0030H
- MAIN:
- MOV P2, #80H ;初始化LED
- MOV P0, #0FFH
- MOV P2, #0A0H ;初始化蜂鸣器
- MOV P0, #00H
- MOV P2, #00H
- MOV R4, #00H ;初始化计数器
- MOV R3, #00H
-
- LOOP1:
- MOV P2, #80H
- MOV P0, #0FFH
- JB P3.0, LOOP2 ;判断S7按键是否按下,若按下则顺序执行,否则跳转
- MOV P2, #80H ;实现功能:LED1亮
- MOV P0, #0FEH
-
- LOOP2:
- MOV P2, #80H
- MOV P0, #0FFH
- JB P3.1, LOOP3 ;判断S6按键是否按下,若按下则顺序执行,否则跳转
- INC R4 ;计数器R4加一
- AJMP FUNC1
- FUNC1:
- CJNE R4, #0AH, FUNC2 ;判断R4寄存器中的数是否等于10,若相等则跳转,不相等则顺序执行
- MOV R4, #00H ;计数器R4清零
- FUNC2:
- MOV P2, #0C0H
- MOV P0, #80H ;选通数码管第一位
- MOV DPTR, #TAB ;读码表
- MOV A, R4 ;计数值移入寄存器A
- MOVC A, @A+DPTR
- MOV P2, #0E0H ;数码管段选
- MOV P0, A ;移入数值
- JB P3.1, LOOP3
- AJMP FUNC2
-
- LOOP3:
- MOV P2, #80H ;初始化LED
- MOV P0, #0FFH
- JB P3.2, LOOP4 ;判断S5按键是否按下,若按下则顺序执行,否则跳转
- MOV P2,#0A0H ;打开蜂鸣器
- SETB P0.6
-
- LOOP4:
- JB P3.3, LOOP1 ;判断S4按键是否按下,若按下则顺序执行,否则跳转
- MOV R3,#08H ;计数器R3填入初值
- MOV A,#0FEH
- AJMP LOOP5
-
- LOOP5: ;实现一次流水灯功能
- MOV P2, #80H
- MOV P0, A
- ACALL DELAY
- ACALL DELAY
- MOV P0, #00H
- RL A
- DJNZ R3, LOOP5
- JMP LOOP1
-
- TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳码表0~9位
- DELAY: MOV R5,#04H ;延时功能
- F3: MOV R6,#0FFH
- F2: MOV R7,#0FFH
- F1: DJNZ R7,F1 ;若为 0 程序向下执行,若不为 0 程序跳转到
- DJNZ R6,F2
- DJNZ R5,F3
- RET
实验目的:
1、熟悉外部中断原理;
2、设计并实现中断的控制以及中断程序的编写。
实现功能:
1、主程序为数码管三段横杆循环亮灭;
2、按下S5跳入外部中断0程序,实现功能:LED流水灯,循环两次;
3、按下S4跳入外部中断1程序,实现功能:数码管段循环点亮,循环两次。
具体代码:
- ORG 0000H
- AJMP MAIN
- ORG 0003H ;外部中断0入口地址
- AJMP OUT0
- ORG 0013H ;外部中断1入口地址
- AJMP OUT1
- ORG 0030H
-
- MAIN:
- MOV P2,#0A0H ;关闭蜂鸣器
- CLR P0.6
- MOV P2,#80H ;关闭LED
- MOV P0,#0FFH
- MOV P2,#00H ;初始化P2口
- SETB EA ;允许总中断
- SETB EX0 ;允许外部中断0
- SETB EX1 ;允许外部中断1
- SETB IT0 ;设置外部中断0边沿触发方式
- SETB IT1 ;设置外部中断1边沿触发方式
- SETB IP.0 ;设置外部中断0优先级控制
- MOV A,#07H
- LOOP: ;主程序
- MOV R0,#00H ;初始化计数器
- MOV R2,#10H
- MOV P2,#0C0H ;数码管位选
- MOV P0,A
- MOV P2,#0E0H ;数码管段选
- MOV P0,#0BFH ;显示一条横杆
- ACALL DELAY
- ACALL DELAY
- MOV P2,#0C0H ;数码管位选清零
- MOV P0,#00H
- RL A ;左移一位
- AJMP LOOP
-
- OUT0:
- MOV R4,#03H ;设置循环次数
- MARK1:
- DJNZ R4,LOOP1
- RETI ;中断返回
- LOOP1:
- MOV P2,#80H ;实现功能:LED流水灯
- MOV P0,#0FEH
- ACALL DELAY
- MOV P0,#0FDH
- ACALL DELAY
- MOV P0,#0FBH
- ACALL DELAY
- MOV P0,#0F7H
- ACALL DELAY
- MOV P0,#0EFH
- ACALL DELAY
- MOV P0,#0DFH
- ACALL DELAY
- MOV P0,#0BFH
- ACALL DELAY
- MOV P0,#7FH
- ACALL DELAY
- AJMP MARK1 ;跳转回标志一
-
- OUT1:
- MOV R4,#03H ;设置循环次数
- MARK2:
- DJNZ R4,LOOP2
- RETI
- LOOP2:
- MOV P2,#0C0H ;实现功能:数码管段循环点亮
- MOV P0,#0FFH
- MOV P2,#0E0H
- MOV P0,#0FEH
- ACALL DELAY
- MOV P0,#0FDH
- ACALL DELAY
- MOV P0,#0FBH
- ACALL DELAY
- MOV P0,#0F7H
- ACALL DELAY
- MOV P0,#0EFH
- ACALL DELAY
- MOV P0,#0DFH
- ACALL DELAY
- AJMP MARK2 ;跳转回标志二
-
- DELAY:MOV R5,#05H ;延时功能
- F3: MOV R6,#0FFH
- F2: MOV R7,#0FFH
- F1: DJNZ R7,F1
- DJNZ R6,F2
- DJNZ R5,F3
- RET
- END
实验目的:
1、熟悉定时器工作以及中断原理;
2、实现定时控制,定时溢出引发定时中断控制蜂鸣器、发光二极管或数码管等功能。
实现功能:
实现简单的秒表功能,具体如下:
1、数码管由左至右依次显示:横杠、空位、秒表十位、秒表个位(带小数点)、秒表100ms位、秒表10ms位(只显示5和0);
2、按键S7按下,开始计时;
3、按键S6按下,暂停计时;
4、按键S5按下,秒表清零。
具体代码:
- ORG 0000H
- AJMP MAIN
- ORG 001BH
- AJMP SER ;中断程序
- ORG 0060H
- MAIN:
- MOV R1,#00H ;初始化计数器R1,作秒表个位,下面同理
- MOV R2,#00H ;秒表十位
- MOV R3,#00H ;秒表10ms位,只显示5和0
- MOV R4,#00H ;秒表100ms位
- MOV TMOD,#10H ;定时器工作模式一
- MOV TH1,#3CH ;赋初始值
- MOV TL1,#0B0H
- SETB EA ;打开总中断
- SETB ET1 ;打开定时器1
-
- LOOP:
- MOV P2,#0C0H ;打开数码管选位端
- MOV P0,#01H ;数码管位一
- MOV P2,#0E0H ;数码管显数端
- MOV P0,#0BFH ;显示一条横杠“-”
- ACALL DELAY ;调用延时功能
- MOV P0,#00H
- MOV P2,#00H
-
- MOV P2,#0C0H
- MOV P0,#04H ;数码管位三
- MOV A,R2 ;将十位数值赋值到累加器A
- MOV DPTR,#TAB1 ;读取码表TAB1
- MOVC A,@A+DPTR
- MOV P2,#0E0H
- MOV P0,A
- ACALL DELAY
- MOV P2,#00H
-
- MOV P2,#0C0H
- MOV P0,#08H ;数码管位四
- MOV A,R1 ;将个位数值赋值到累加器A
- MOV DPTR,#TAB2 ;读取码表TAB2
- MOVC A,@A+DPTR
- MOV P2,#0E0H
- MOV P0,A
- ACALL DELAY
- MOV P2,#00H
-
- MOV P2,#0C0H
- MOV P0,#10H ;数码管位五
- MOV A,R4 ;将100ms位的数值赋值到累加器A
- MOV DPTR,#TAB1
- MOVC A,@A+DPTR
- MOV P2,#0E0H
- MOV P0,A
- ACALL DELAY
- MOV P2,#00H
-
- MOV P2,#0C0H
- MOV P0,#20H ;数码管位六
- MOV A,R3 ;将10ms位的数值赋值到累加器A
- MOV DPTR,#TAB3
- MOVC A,@A+DPTR
- MOV P2,#0E0H
- MOV P0,A
- ACALL DELAY
- MOV P2,#00H
-
- MOV P2,#0C0H
- MOV P0,#80H ;数码管位八
- MOV P2,#0E0H
- MOV P0,#0BFH ;显示一条横杠“-”
- ACALL DELAY
- MOV P0,#00H ;清零P0口
- MOV P2,#00H ;清零P2口
-
- JNB P3.0,BIN1 ;扫描独立按键
- JNB P3.1,BIN2
- JNB P3.2,BIN3
-
- AJMP LOOP
-
- SER:
- INC R3 ;每跳入一次中断,过了50ms,增加一次R3
- CJNE R3,#02H,F ;若R3等于2,即过100ms,则清零R3并增加R4
- MOV R3,#00H
- INC R4
- CJNE R4,#0AH,F ;若R4等于10,即过了1s,则清零R4并增加R1
- MOV R4,#00H
- INC R1
- CJNE R1,#0AH,F ;若R1等于10,即过了10s,则清零R1并增加R2
- MOV R1,#00H
- INC R2
- CJNE R2,#0AH,F ;若R2等于10,即过了100s,则清零R2
- MOV R2,#00H
- F:
- MOV TH1,#3CH ;重新赋值
- MOV TL1,#0B0H
- RETI;中断返回
-
- BIN1:
- SETB TR1 ;打开定时器
- AJMP LOOP
- BIN2:
- CLR TR1 ;停止定时器
- AJMP LOOP
- BIN3:
- MOV R1,#00H ;按键功能:计时清零
- MOV R2,#00H
- MOV R3,#00H
- MOV R4,#00H
- AJMP LOOP
-
- TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数码管0~9
- TAB2:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;数码管0~9带小数点位
- TAB3:DB 0C0H,92H ;数码管0,5
-
- DELAY: MOV R5,#01H ;延时功能
- F3: MOV R6,#0FH
- F2: MOV R7,#0FH
- F1: DJNZ R7,F1
- DJNZ R6,F2
- DJNZ R5,F3
- RET
- END
实验目的:
1、熟悉串行通信原理;
2、实现串行发送、串行接收,并将发送或接收的内容通过发光二极管或数码管。
实现功能:
1、在20H~2AH存入数据"HELLO-WORLD"的字母数码管段显数据;
2、在数码管上显示出HELLO-WORLD,具体方式为:
数码管状态1:【HELLO-WO】;
数码管状态2:【ELLO-WOR】;
数码管状态3:【LLO-WORL】;
数码管状态4:【LO-WORLD】;
上述4个状态循环。并使用串口发送实现。
具体代码:
- ORG 0000H
- AJMP START
- ORG 0023H ;串口中断入口地址
- AJMP INTER
- ORG 0060H ;主程序起始地址
- AUXR EQU 8EH ;AUXR伪指令部分
- START:
- MOV P2,#0A0H ;选通控制蜂鸣器与继电器
- MOV P0,#00H ;关闭蜂鸣器与继电器
- MOV P2,#00H
- MOV P0,#00H
- MOV TMOD,#20H ;0010 0000 M1 M2 = 1 0 选择定时器T1为方式2 自动重装8位
- MOV TH1,#0E8H ;定时器赋初值
- MOV TL1,#0E8H ;设置波特率为1200Baud
- SETB TR1 ;打开定时器T1
- MOV AUXR,#00H ;定时器1时钟为Fosc/12,即12T
- MOV PCON,#00H ;令SMOD=0
- MOV SCON,#40H ;0100 0000 SM0 SM1 = 0 1 串行口为方式1
- SETB EA ;打开总中断
- SETB ES ;打开串口中断
-
- MOV 20H,#89H ;存入数据HELLO-WORLD
- MOV 21H,#86H
- MOV 22H,#0C7H
- MOV 23H,#0C7H
- MOV 24H,#0C0H
- MOV 25H,#0BFH
- MOV 26H,#81H
- MOV 27H,#0C0H
- MOV 28H,#88H
- MOV 29H,#0C7H
- MOV 2AH,#0C0H
-
- MOV A,@R0; ;(A)=R0
- MOV SBUF,A; ;发送数据
-
- SJMP $ ;等待中断
-
- INTER:
- Send:
- MOV P2,#0C0H
- MOV P0,#01H ;数码管第1位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A ;发送数据
- MOV P0,A ;数码管显示字母
- ACALL DELAY
- INC R0 ;R0加1
-
- MOV P2,#0C0H
- MOV P0,#02H ;数码管第2位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A
- MOV P0,A
- ACALL DELAY
- INC R0
-
- MOV P2,#0C0H
- MOV P0,#04H ;数码管第3位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A
- MOV P0,A
- ACALL DELAY
- INC R0
-
- MOV P2,#0C0H
- MOV P0,#08H ;数码管第4位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A
- MOV P0,A
- ACALL DELAY
- INC R0
-
- MOV P2,#0C0H
- MOV P0,#10H ;数码管第5位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A
- MOV P0,A
- ACALL DELAY
- INC R0
-
- MOV P2,#0C0H
- MOV P0,#20H ;数码管第6位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A
- MOV P0,A
- ACALL DELAY
- INC R0
-
- MOV P2,#0C0H
- MOV P0,#40H ;数码管第7位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A
- MOV P0,A
- ACALL DELAY
- INC R0
-
- MOV P2,#0C0H
- MOV P0,#80H ;数码管第8位
- MOV P2,#0E0H
- MOV A,@R0
- MOV SBUF,A
- MOV P0,A
- ACALL DELAY
-
- INC R3
-
- JU1:CJNE R3,#040H,JU2 ;跳入串口中断4次后跳转,否则顺序执行
- INC R4 ;R4加1
- MOV R3,#00H ;清零R3
- JU2:CJNE R4,#00H,JU3 ;R4为0时顺序执行,否则跳转
- MOV R0,#20H ;从20H开始发送
- JU3:CJNE R4,#01H,JU4 ;R4为1时顺序执行,否则跳转
- MOV R0,#21H ;从21H开始发送
- JU4:CJNE R4,#02H,JU5 ;R4为2时顺序执行,否则跳转
- MOV R0,#22H ;从22H开始发送
- JU5:CJNE R4,#03H,JU6 ;R4为3时顺序执行,否则跳转
- MOV R0,#23H ;从23H开始发送
- JU6:CJNE R4,#04H,J ;R4为4时顺序执行,否则跳转
- MOV R0,#00H ;清零R0和R4
- MOV R4,#00H
- J: RETI ;中断返回
-
- DELAY:
- MOV R5,#01H ;延时功能
- F3: MOV R6,#0FH
- F2: MOV R7,#0FFH
- F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到
- DJNZ R6,F2
- DJNZ R5,F3
- RET
- END
实现功能:
1、借助STC驱动软件的串口助手,设定好多字符传送的内容,使用单片机接收,并将接收到的数据内容显示到数码管上。
具体代码:
- ORG 0000H
- AJMP START
- ORG 0023H ;串口中断入口地址
- AJMP INTER
- ORG 0060H ;主程序起始地址
- AUXR EQU 8EH ;AUXR伪指令部分
- START:
- ;系统初始化
- MOV P2,#0A0H ;选通控制蜂鸣器与继电器
- MOV P0,#00H ;关闭蜂鸣器与继电器
- MOV P2,#00H ;清零P2口
- MOV P0,#00H ;清零P0口
- MOV TMOD,#20H ;0010 0000 M1 M2 = 1 0 选择定时器T1为方式2 自动重装8位
- MOV TH1,#0E8H ;定时器赋初值
- MOV TL1,#0E8H ;设置波特率为1200Baud
- SETB TR1 ;打开定时器T1
- MOV AUXR,#00H ;定时器1时钟为Fosc/12,即12T
- MOV PCON,#00H ;令SMOD=0
- MOV SCON,#40H ;0100 0000 SM0 SM1 = 0 1 串行口为方式1
- SETB EA ;打开总中断
- SETB ES ;打开串口中断
- MOV R0,#20H;
- MOV R2,#8
- SETB REN ;启动接受允许位
- MOV A,SBUF
-
- SJMP $ ;等待中断
-
- REC:
- CLR RI ;接收完清零RI
-
- MOV A,SBUF ;读取接收的数据
- MOV P2,#0C0H ;选通控制数码管位选
- MOV P0,#01H
- MOV P2,#0E0H ;选通控制数码管段选
- MOV P0,A ;(P0)=(A)
- MOV P2,#00H ;清零P2口
- MOV P0,#00H ;清零P0口
-
- RETI
-
- DELAY:
- MOV R5,#0FH ;延时功能
- F3: MOV R6,#0FH
- F2: MOV R7,#0FFH
- F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到
- DJNZ R6,F2
- DJNZ R5,F3
- RET
- END
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。