第一篇:单片机实验指导书
单片机实验指导书
实验说明
实验1:定时控制实验
要求:电路连接与编程相结合,控制灯按一定规律点亮和熄灭。注意:灯为低电平驱动。
实验报告:说明灯亮的方式;画出实际电路图、程序流程图和源程序(要有详细注释)。
实验2:密码锁实验
要求:三个数码键一个确认键,按设定的密码(开关顺序)使灯点亮。
注意:为消除开关触点抖动,判断时要加10毫秒左右的延时。
实验报告:说明密码顺序;画出实际电路图、程序流程图和源程序(要有详细注释)。
实验3:音乐发生器实验
要求:电路连接与编程相结合,使单片机演奏一段乐曲。
实验报告:画出实际电路图、程序流程图和源程序(要有详细注释)。
实验4:串口通讯实验
要求:两人为一组,一人为发一人为收,通过串口连接。用发者的开关控制收者的灯点亮或发出音响。之后二人交换收、发。实验报告:画出电路图、程序流程图和源程序(要有详细注释)。
硬件测试程序
main: mov p0,#0ffhmov p1,#0ffhmov p2,#0ffhmov p3,#0ffhacall spk1
mov p0,#00hmov p1,#00hmov p2,#00hmov p3,#00hacall spk2
sjmp main
spk1: mov r0,#0ffhmov r2,#0ffhacall spk
ret
spk2: mov r0,#0ffhmov r2,#0dfhacall spk
ret
spk:cpl p1.0
lp1:mov a,r2,mov r5,adjnz r5,$cpl p1.0djnz r0,lp1
ret
;端口设置 ;1-灯灭
;调音响1 ;端口清0 ;灯亮
;调音响2 ;返回重复
;设音响1 ;参数 ;调音响
;设音响2 ;参数 ;调音响
;P1.0翻转
;音调延时 ;P1.0翻转 ;音长延时
第二篇:单片机技术实验指导书
《单片机控制技术》实验指导书
实验一 流水灯实验(左移右移方式)
一. 实验项目卡编号:59010115-01 二. 实验目的
通过此实验,让大家初步掌握左移位、右移位指令的使用。三. 实验设备
1. S51E单片机学习开发板一块 2. PC微机一台
四. 实验步骤
1. 打开编译软件伟煌MCS51开发系统。
2. 编写源程序并进行调试。要求:小灯先向左依次移动8次,再向右依次移动7次,随后循环前面的工作。
3. 将S51E开发板连接到PC机上。
对应的89S51与LED引脚的连线为 LED1——————P1.0 LED2——————P1.1 LED3——————P1.2 LED4——————P1.3 LED5——————P1.4 LED6——————P1.5 LED7——————P1.6 LED8——————P1.7 4.打开开发板电源,用软件将调试好的程序下载至单片机中,观察实验现象。
五.实验参考程序 ORG 0000H START:MOV A,#0FFH CLR C MOV R2,#08H LOOP:RLC A MOV P1,A LCALL DELAY DJNZ R2,LOOP MOV R2,#07H LOOP1:RRC A MOV P1,A LCALL DELAY DJNZ R2,LOOP1 JMP START DELAY:MOV R4,#200 D1: MOV R5,#248 DJNZ R5,$ DJNZ R4,D1 RET END
实验二 流水灯实验(利用查表方式)
一.实验项目卡编号:59010115-02 二.实验目的
通过此实验,让同学们掌握查表指令的使用。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1. 打开编译软件伟煌MCS51开发系统。
2. 编写源程序并进行调试。要求:学习利用查表方式,使小灯做舞台灯效果的变化,左移3次,右移3次,闪烁3次,廷时时间为200毫秒。3. 将S51E开发板连接到PC机上。
对应的89S51与LED引脚的连线为 LED1——————P1.0 LED2——————P1.1 LED3——————P1.2 LED4——————P1.3 LED5——————P1.4 LED6——————P1.5 LED7——————P1.6 LED8——————P1.7 4.打开开发板电源,用软件将调试好的程序下载至单片机中,观察实验现象。
五.实验参考程序 ORG 0000H MOV P1,#00H MOV A,#00H START:MOV DPTR,#TABLE LOOP: CLR A MOVC A,@A+DPTR CJNE A,#01H,LOOP1 JMP START LOOP1:MOV P1,A MOV R3,#20 LCALL DELAY JMP LOOP DELAY:MOV R4,#20 D1: MOV R5,#248 DJNZ R5,$ DJNZ R4,D1 DJNZ R3,DELAY RET TABLE:DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 7FH, 0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 7FH, 0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 7FH, 0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H,0FFH,00H,0FFH DB 00H,OFFH
END
实验三 按键的应用(按键控制小灯)
一.实验项目卡编号:59010115-03 二.实验目的
1.掌握按键的识别与处理。2.加强对输入控制的理解。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。
2.编写源程序并进行调试。要求:利用按键的方式,控制小灯的亮灭,按键后小灯亮,再次按键后小灯灭。了解人为按键的自然规律:由于单片机的指令执行很快,按键必须进行延时来消除抖动,并要求在按键后执行子程序的最后加入一条指令检测按键是否放下。3.将S51E开发板连接到PC机上。
对应的89S51与LED引脚的连线为 LED1——————P1.0 SW1———————P2.2 SW2———————P2.3 SW3———————P2.4 SW4———————P2.5 SW5———————P2.6 SW6———————P2.7 4.打开开发板电源,用软件将调试好的程序下载至单片机中,按动键盘观察实验现象。
五.实验参考程序
KEY BIT P3.3 SW1 BIT P2.2 ORG 0000H
START:MOV SP,#40H
MOV P2,#0FFH
MOV P3,#0FFH
MOV P1,#0FFH
CLR KEY
WAIT: JB KEY,$
JB SW1,$
LCALL DELAY
CPL P1.0
JNB SW1,$
JMP WAIT
DELAY:MOV R3,#200
D1:
MOV R4,#200
DJNZ R4,$
DJNZ R3,D1
RET
END
实验四 外部中断实验
一.实验项目卡编号:59010115-04 二.实验目的
1.了解51单片机外部中断原理和概念。
2.学习如何使用编程来调用中断服务子程序的整个过程。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。
2.编写源程序并进行调试。要求:当主程序运行后,小灯一直在做右移循环运动,当按键发生后则触发了中断1,开始执行中断1的服务子程序,小灯全部闪烁10次,然后再返回主程序,继续原来的循环。
3.将S51E开发板连接到PC机上。
对应的89S51与LED引脚的连线为 LED1——————P1.0 LED2——————P1.1 LED3——————P1.2 LED4——————P1.3 LED5——————P1.4 LED6——————P1.5 LED7——————P1.6 LED8——————P1.7 SW1———————P2.2 SW2———————P2.3 SW3———————P2.4 SW4———————P2.5 SW5———————P2.6 SW6———————P2.7 INT1(P3.3)——————SW 4.打开开发板电源,用软件将调试好的程序下载至单片机中,按动键盘观察实验现象。
五.实验参考程序
ORG 0000H
JMP START
ORG 0013H
JMP EXT1
ORG 100H
START:MOV IE,#84H
MOV IP,#04H
MOV TCON,#00H
MOV SP,#40H
MOV P1,#0FFH
MOV P2,#00H
MOV P3,#0FFH
SETB P2.0
LOOP:MOV A,#0FFH
CLR C
MOV R2,#08H
LOOP1:RLC A
MOV P1,A
LCALL DELAY
DJNZ R2,LOOP1
JMP LOOP
EXT1:PUSH ACC
PUSH PSW
MOV A,#00H
MOV R3,#10 LOOP2:MOV P1,A
LCALL DELAY
CPL A
DJNZ R3,LOOP2
POP PSW
POP ACC
RETI
DELAY:MOV R5,#20
D1:MOV R6,#20
D2:MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
实验五 定时器中断实验
一.实验项目卡编号:59010115-05 二.实验目的
1.了解51单片机定时器中断原理和概念。
2.学习如何使用编程来调用中断服务子程序的整个过程。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。
2.编写源程序并进行调试。要求:当主程序运行后,用51单片机定时器中断来令小灯每隔1秒就左移一次。
3.将S51E开发板连接到PC机上。
对应的89S51与LED引脚的连线为 LED1——————P1.0 LED2——————P1.1 LED3——————P1.2 LED4——————P1.3 LED5——————P1.4 LED6——————P1.5 LED7——————P1.6 LED8——————P1.7 4.打开开发板电源,用软件将调试好的程序下载至单片机中,观察实验现象。
五.实验参考程序
ORG 0000H
JMP START
ORG 000BH
JMP TIM0
ORG 100H START:MOV P1,#0FFH
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
MOV IE,#82H
MOV R2,#100
MOV P1.#0FEH
SJMP $
TIM0: PUSH ACC
PUSH PSW
MOV TH0,# HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
DJNZ R2,LOOP
MOV R2,#100
MOV A,P1
RL A
MOV P1,A LOOP: POP PSW
POP ACC
RETI
END
实验六 中断优先级实验
一.实验项目卡编号:59010115-06 二.实验目的
1.学习设置51单片机的中断优先级。
2.学习如何使用编程来调用中断服务子程序的整个过程。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。2.编写源程序并进行调试。要求:当主程序运行后,首先P1的8个LED每隔1秒就左移一次,当按键后8个LED闪烁5次。
3.将S51E开发板连接到PC机上。
对应的89S51与LED引脚的连线为 LED1——————P1.0 LED2——————P1.1 LED3——————P1.2 LED4——————P1.3 LED5——————P1.4 LED6——————P1.5 LED7——————P1.6 LED8——————P1.7 INT1(P3.3)——————SW 4.打开开发板电源,用软件将调试好的程序下载至单片机中,按动键盘观察实验现象。
五.实验参考程序
ORG 0000H JMP START ORT 000BH JMP TIM0 ORG 100H START:MOV P1,#0FFH MOV TMOD,#01H MOV TH0,#HIGH(65536-10000)MOV TL0,#LOW(65536-10000)SETB TR0 MOV IE,#86H MOV IP,#04H:用MOV IP,#00H代替本行看结果如何? MOV R2,#50 MOV P2,#00H MOV P3,#0FFH SETB P2.0 MOV P1,#0FEH SJMP $ EXT1: PUSH ACC PUSH PSW MOV A,#00H MOV R3,#10 LOOP1: MOV P1,A LCALL DELAY CPL A DJNZ R3,LOOP1 MOV P1,#0FEH POP PSW POP ACC RETI TIM0: PUSH ACC PUSH PSW MOV TH0,#HIGH(65536-10000)MOV TL0,#LOW(65536-10000)DJNZ R2,LOOP MOV R2,#100 MOV A,P1 RL A MOV P1,A LOOP: POP PSW POP ACC RETI DELAY: MOV R6,#0FFH D1: MOV R7,#0FFH DJNZ R7,$ DJNZ R6,D1 RET END
实验七 RS232串行通讯实验
一.实验项目卡编号:59010115-07 二.实验目的
1.了解RS232串行通讯的工作原理。
2.掌握用查询方式进行数据传输的控制原理。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。
2.编写源程序并进行调试。要求:实验中通过RS232的自收自发对小灯进行右移控制。3.将S51E开发板连接到PC机上。
将89S51的引脚RXD(P3.0)与TXD(P3.1)引脚对接。
4.打开开发板电源,用软件将调试好的程序下载至单片机中,观察实验现象。
五.实验参考程序
NUM EQU 20H
ORG 0000H JMP START ORG 100H MOV NUM,#00H START:MOV SCON,#50H MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH MOV TMOD,#20H MOV TH1,#0FDH MOV TL1,#0FDH SETB TR1 LOOP:MOV DPTR,#TABLE MOV A,NUM MOVC A,@A+DPTR JZ CLRA0 RET1:INC NUM CLR TI MOV SUBF,A CLR RI LOOP1:JBC RI,LOOP2 JMP LOOP1 LOOP2:MOV A,SUBF MOV P1,A LCALL DELAY JMP START CLRA0:MOV NUM,#00H MOV A,NUM
MOV DPTR,#TABLE MOVC A,@A+DPTR JMP RET1 DELAY:MOV R7,#50 D1:MOV R6,#20 D2:MOV R5,#248 DJNZ R5,$ DJNZ R6,D2 DJNZ R7,D1 RET TABLE:DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,7FH DB 00H END
实验八 八段数码管动态显示实验
一.实验项目卡编号:59010115-08 二.实验目的
1.掌握数码管的显示原理。2.掌握动态显示的控制原理。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。
2.编写源程序并进行调试。要求:实验中能在开发板的两个数码管上显示99倒记时。3.将S51E开发板连接到PC机上。
89S51与数码管显示器对应引脚的联机为: P0.0————————数码管显示器的a脚 P0.1————————数码管显示器的b脚 P0.2————————数码管显示器的c脚 P0.3————————数码管显示器的d脚 P0.4————————数码管显示器的e脚 P0.5————————数码管显示器的f脚 P0.6————————数码管显示器的g脚 P0.7————————数码管显示器的dp脚 P2.6————————数码管显示器1的驱动脚 P2.7————————数码管显示器2的驱动脚
4.打开开发板电源,用软件将调试好的程序下载至单片机中,观察实验现象。
五.实验参考程序
MIAO EQU 21H GEWEI EQU 22H SHIWEI EQU 23H SCANLED BIT 01H ORG 0000H JMP START ORG 0BH JMP TIMER0 ORG 100H START:MOV SP,#40H MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#OFFH MOV R0,#20H MOV R5,#60H CLR0:MOV @R0,#00H INC RO DJNZ R5,CLR0 MOV TMOD,#01H
MOV TH0,#HIGH(65536-5000)MOV TL0,#HIGH(65536-5000)SETB TR0
MOV IE,#82H MOV R7,#200 MOV MIAO,#99 AJMP $ TIMER0: PUSH ACC PUSH PSW MOV TH0,#HIGH(65536-5000)
MOV TL0,#HIGH(65536-5000)DJNZ R7,TIM0_LP MOV R7,#200 DJNZ R7,TIM0_LP MOV MIAO,#99 TIM0_LP: MOV A,MIAO LCALL BIN_BCD MOV SHIWEI,A MOV GEWEI,B CPL SCANLED JB SCAN_L1 JMP SCAN_L2 SCAN_L1:MOV P2,#7FH MOV A,SHIWEI JMP END_SCAN SCAN_L1:MOV P2,#0BFH MOV A,GEWEI JMP END_SCAN END_SCAN:MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A POP PSW POP ACC RETI BIN_BCD:MOV B,#10 DIV AB RET TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H DB 90H END 实验九 模拟交通灯实验(调用延时子程序方式)
一.实验项目卡编号:59010115-09 二.实验目的
1.掌握数码管的显示原理。2.学习延时子程序的编写。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。
2.编写源程序并进行调试。要求:实验中模拟交通灯红灯先亮10秒时间,接着黄灯亮3秒时间,随后绿灯再亮10秒时间。
89S51与数码管显示器对应引脚的联机为: P0.0————————数码管显示器的a脚 P0.1————————数码管显示器的b脚 P0.2————————数码管显示器的c脚 P0.3————————数码管显示器的d脚 P0.4————————数码管显示器的e脚 P0.5————————数码管显示器的f脚 P0.6————————数码管显示器的g脚 P0.7————————数码管显示器的dp脚 P2.6————————数码管显示器1的驱动脚 P2.7————————数码管显示器2的驱动脚
LED1——————P1.0 LED2——————P1.1 LED3——————P1.2 LED4——————P1.3 LED5——————P1.4 LED6——————P1.5 4.打开开发板电源,用软件将调试好的程序下载至单片机中,观察实验现象。
五.实验参考程序
GEWEI EQU 21H SHIWEI EQU 22H SCANLED EQU 23H RED EQU 24H GREEN EQU 25H YELLOW EQU 26H NUMTIM EQU 27H ORG 0000H JMP START ORG 0BH JMP TIMER0 ORG 100H START:MOV SP,#40H MOV R0,#20H MOV R5,#20 CLR0: MOV @R0,#00H INC R0 DJNZ R5,CLR0 MOV TMOD #01H MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
SETB TR0 MOV IE,#82H MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH MOV R3,#10 MOV R2,#3 MOV R1,#10 INE: MOV RED,#10 MOV YELLOW,#3 MOV GREEN,#10 LOOP:MOV P1,#0FBH MOV NUMTIM,RED LCALL DELAY1 DEC RED DJNZ R3,LOOP MOV R3,#10 MOV NUMTIM,#00H LCALL DELAY1 LOOP1:MOV P1,#0F3H MOV NUMTIM,YELLOW LCALL DELAY1 DEC YELLOW DJNZ R2,LOOP1 MOV R2,#3 MOV NUMTIM,#00H LCALL DELAY1 LOOP2: MOV P1,#0BFH MOV NUMTIM,GREEN LCALL DELAY1 DEC GREEN DJNZ R1,LOOP2 MOV R1,#10 MOV NUMTIM,#00H LCALL DELAY1 MOV YELLOW,#3 LOOP3: MOV P1,#0F3H MOV NUMTIM,YELLOW LCALL DELAY1 DEC YELLOW DJNZ R2,LOOP3 MOV R2,#3 MOV NUMTIM,#00H LCALL DELAY1 LJMP INI TIMER0:PUSH ACC PUSH PSW MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)MOV A,NUMTIM LCALL BIN_BCD MOV SHIWEI,A MOV GEWEI,B MOV A,SCANLED CPL A MOV SCANLED,A JZ SCAN_L1 JMP SCAN_L2 SCAN_L1:MOV P2,#7FH MOV A,SHIWEI JMP END_SCAN SCAN_L2:MOV P2,#0BFH MOV A,GEWEI JMP END_SCAN END_SCAN:MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A POP PSW POP ACC RETI BIN_BCD:MOV B,#10
DIV AB RET DELAY1:MOV R6,#10 D1:MOV R5,#200 D2:MOV R4,#248 DJNZ R4,$ DJNZ R5,D2 DJNZ R6,D1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 实验十 模拟交通灯实验(调用定时中断方式)
一.实验项目卡编号:59010115-10 二.实验目的
1.掌握数码管的显示原理。2.学习中断子程序的编写。三.实验设备
1.S51E单片机学习开发板一块 2.PC微机一台 四.实验步骤
1.打开编译软件伟煌MCS51开发系统。
2.编写源程序并进行调试。要求:实验中模拟交通灯红灯先亮10秒时间,接着黄灯亮3秒时间,随后绿灯再亮10秒时间。
89S51与数码管显示器对应引脚的联机为: P0.0————————数码管显示器的a脚 P0.1————————数码管显示器的b脚 P0.2————————数码管显示器的c脚 P0.3————————数码管显示器的d脚 P0.4————————数码管显示器的e脚 P0.5————————数码管显示器的f脚 P0.6————————数码管显示器的g脚 P0.7————————数码管显示器的dp脚 P2.6————————数码管显示器1的驱动脚 P2.7————————数码管显示器2的驱动脚
LED1——————P1.0 LED2——————P1.1 LED3——————P1.2 LED4——————P1.3 LED5——————P1.4 LED6——————P1.5 4.打开开发板电源,用软件将调试好的程序下载至单片机中,观察实验现象。
五.实验参考程序
GEWEI EQU 21H SHIWEI EQU 23H SCANLED EQU 25H SCANMODE EQU 26H RED EQU 28H GREEN EQU 29H YELLOW EQU 2AH NUMTIM EQU 2BH LED EQU 34H ORG 0000H JMP START ORG 0BH JMP TIMER0 ORG 100H START:MOV SP,#30H MOV R0,#20H
MOV R5,#40 CLR0: MOV @R0,#00H INC R0 DJNZ R5,CLR0 MOV TMOD #01H MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
SETB TR0 MOV IE,#82H MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH MOV R3,#10 MOV R2,#3 MOV R1,#10
MOV RED,#10 MOV YELLOW,#3 MOV GREEN,#10 MOV NUMTIM,#10 MOV LED,#0FFH AJMP $ TIMER0:PUSH ACC PUSH PSW MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
DJNZ R7,RET0 MOV R7,#200 MOV A,SCANMODE MOV B,#4 DIV AB MOV A,B RL A MOV DPTR,#TAB_SCAN JMP @A+DPTR TAB_SCAN:AJMP RED_LIGHT AJMP YEL_LIGHT AJMP GRE_LIGHT AJMP YEL_LIGHT RET0:MOV A,NUMTIM
LCALL BIN_BCD MOV SHIWEI,A MOV GEWEI,B INC SCANLED MOV A,SCANLED MOV B,#4 DIV AB RL A MOV DPTR,#TAB_SCAN0 JMP @A+DPTR TAB_SCAN0:AJMP SCAN_L1 AJMP SCAN_L2 SCAN_L1: MOV P2,#0F7H MOV A,SHIWEI JMP END_SCAN SCAN_L2: MOV P2,#0FBH MOV A,GEWEI JMP END_SCAN END_SCAN:MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,LED MOV P1,A POP PSW POP ACC RETI RED_LIGHT:MOV LED,#OFBH MOV NUMTIM,RED DEC RED MOV A,RED CJNE A,#0FFH,RET0 MOV RED,#10 MOV A,SCANMODE ADD A,#01H MOV SCANMODE,A
JMP RET0 YEL_LIGHT:MOV LED,#0F3H MOV NUMTIM,YELLOW DEC YELLOW MOV A,YELLOW CJNE A,#0FFH,RET0 MOV YELLOW,#3 MOV A,SCANMODE ADD A,#01H MOV SCANMODE,A JMP RET0 GRE_LIGHT: MOV LED,#0BFH MOV NUMTIM,GREEN DEC GREEN MOV A,GREEN CJNE A,#0FFH,RET1 MOV GREEN,#10 MOV A,SCANMODE ADD A,#01H MOV SCANMODE,A RET1:JMP RET0 BIN_BCD: MOV B,#10 DIV AB RET DELAY: MOV R5,#02 D1: MOV R6,#200 D2: MOV R7,#200 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END
第三篇:单片机课程设计指导书
单片机课程设计指导书
一、设计内容及步骤
1、方案设计
先要明确设计任务的要求,根据设计任务及要求,确定设计所要实现的具体功能,例如“流水灯”具体怎么“流”、有几种“花样”、如何操作、等等。这是一项见仁见智的工作,没有统一的要求,各人可根据自己的理解自行设计。
2、硬件电路设计
设计能使单片机工作并实现所需功能的基本硬件电路,包括选择和确定元器件的规格、参数。
3、软件程序设计
单片机由于内存小、速度低,因此一般不用高级语言编程而多用汇编语言编程,这样软件程序和硬件电路就要有严格的对应关系。单片机电路的功能主要是由软件程序实现的,因此硬件电路比较简单而软件程序相对复杂,软件程序设计是整个课程设计的难点和重点。
4、烧写调试程序
由于软件程序一般都比较复杂,设计时难免会有考虑不周的问题,或是有一些疏漏,而这些问题或疏漏仅凭在纸上的分析是很难发现的,因此软件程序设计好后还要经过运行调试,才能知道所设计的软件程序能否实现之前确定的功能。这个过程往往要经过多次反复才能最终达到目的。一般先用计算机仿真进行调试,成功后再把程序写到单片机中并制作实际电路进行验证。
二、设计方法及要求
1、方案设计
首先要完整、准确地理解设计任务(虽然课程设计只是做个电路模型进行一下验证演示,但设计时要假象是设计一个实用的产品),然后通过必要的调研、分析,综合考虑各方面的因素,定出一个具体的设计目标。
例如,可先把自己当作用户,从用户的角度考虑这个“产品”应该具备哪些功能、怎样操作使用比较方便,同时又安全可靠;再从厂家的角度,结合实际的客观条件,考虑怎样既能满足用户的基本需求,又能最大限度地降低生产成本。
因此设计目标不要追求尽善尽美,但也不能过于简单,要从实际出发,用足用够给定的硬件条件,充分开发可以用软件实现的功能以使整体功能最大化。
2、硬件设计
硬件设计包括确定电路的结构组成、绘制电气原理图、确定元器件的规格参数。
由于是课程设计,多数题目采用最小系统即可,如果要求高一点,还要考虑抗干扰措施、电路的功耗、数据的断电保护、元器件的来源和性价比等。
最小系统基本上是一种固定的模式,需要设计的就是合理分配单片机的资源,分配、确定输入输出端口用途,这没有固定的模式,只要符合单片机的端口功能和性能就行。例如,输入输出应优先采用P1口,还要注意各口作输出口时带负载的能力,即高电平时所能输出的最大电流,或低电平时允许灌入的最大电流,以及高阻态时所能承受的最高电压。原则上输出口所接负载的电流消耗不能超过输出口允许进出的最大电流值,最好是让输出口通过缓冲驱动器(例如三极管)带负载而不是直接带负载,以免造成单片机的损坏。
硬件结构应结和应用软件一并考虑,若某种功能既可以用硬件实现,也可以用软件实现,应优先选择用软件实现,以尽可能地简化硬件结构。
3、软件设计
软件设计要结合功能设计和硬件设计进行,或者说在做功能设计和硬件设计时就要对软件设计有所考虑,即那些功能应由软件完成。
设计软件不要一来就急于用指令写程序,要先做总体规划设计,明确软件要实现的功能是什么,分那些步骤、按什么顺序来实现设计的功能,画出程序的流程图。程序的流程也就是单片机的工作过程,从通电工作开始,程序的第一步做什么,后面又做什么„„;怎样结束,等等。由于单片机是靠程序进行工作的,程序怎么规定它就怎么做,程序没有规定它就无法工作,很死板。因此设计程序流程时要作仔细、周全的考虑,只要出现所设计的“产品”在正常操作使用过程中可能出现的任何一种情况,都要让单片机知道该如何应对处理,否则就会出现死机无法工作的情况。
程序的流程是编写程序的纲领、指导、前提,有了正确的程序流程,就容易编写出正确的程序,单片机也才能实现所设计的功能。俗话说,磨刀不误砍柴工,所以构思、设计程序的流程要给予高度的重视,要花大的气力,有时一次两次难以考虑周全,可能需要反反复复地进行多次。
如果整个流程实现一个总体功能,则流程的每一分支或步骤即可看成是一个子功能。对于比较复杂的功能,则子功能下还可再分解出孙功能,即总体功能画一个流程图,再针对较大的子功能画细致的流程图。总之流程图画的越细致,程序越容易编写。
流程设计好后,也不要就急于写具体的程序,因为那样写程序缺乏条理,很容易出错,而且可读性差,难以发现和纠正错误。因此写程序前还应对程序的编写结构进行认真的规划设计。
程序的结构总体上可分为两大部分,即主程序和子程序(或中断程序)。主程序可按程序的功能分块、分段进行编写,每块、每段完成一个特定的功能。如果某一块或段在主程序中需多次出现,应把它作为子程序,以减少整个程序的长度。
程序设计的重点在于搭建程序的框架,框架搭成,工作就完成了大半,剩下的就是填充框架。填充框架不一定要自己去一条一条地想该用什么指令,可根据某一块或某一段程序的功能,寻找具有相同功能的现成的程序块、段去填充,对于一些“通用”的程序段,例如按键消抖程序、延时程序等,应优先采用成熟的“标准”程序,这样既可减少工作量,又可减少出错。事实上,程序设计大多数时候就是用一些零散、成熟的程序快(段)拼凑成一个自己所需的完整程序。
程序运行中,可能需要在不同的功能模块间进行跳转,这就需要在跳转的入口处加上标号。为便于阅读,在符合指令的语法规则的前提下,标号应能简要地反映该段程序的功能,例如采取常见的英文缩写或汉语拼音缩写(通常是缩写单字拼音的首字母)。
运用跳转指令时要注意避免进入死循环。若不可避免进入死循环,或有意要进入死循环,除复位外,最好能有其他退出死循环的措施。
单片机程序的运行离不开单片机的内存,因此编写程序前还应充分了解所用单片机的内存情况,尤其是要搞清楚那些具有特定用途的特殊内存的用途、位置及长度,同时还要搞清楚所用程序指令(包括常数表格)以及依程序流程产生的各项数据要占用的存储空间,编写程序前,要合理地分配利用内存空间,注意不要占用特殊内存。
最后,为了便于以后(以及其他人)对程序的阅读、分析,所编写的程序应该条理清楚,程序各块、段、条的功能作用明确,在一些重要、关键或用意不是很明确的指令后最好加以注释。
三、设计报告的内容及要求
1、方案设计说明
从总体上概括介绍所设计项目的构成、功能及操作使用方法,详细说明该方案是怎么设计出来的。
2、硬件设计说明
画出完整、规范的电路图,说明单片机I/O口分配使用的情况以及为何这样分配使用,分析介绍电路的工作原理,介绍电路中主要元器件在电路中的作用以及他们的规格或参数是怎样确定的。
3、软件设计说明
1)说明软件设计的思路,介绍软件的总体功能,画出完整、规范的程序的流程图;
2)介绍程序的总体框架结构,即整个程序由哪些模块构成,各模块的功
能是什么,其中又包含哪些子功能,等等,从总体上说明整个程序的执行及工作过程;
3)以一些重要或关键的程序段为例,说明该段程序的功能、作用和编写
思路;
4)列出完整的程序清单,重要、关键或难以理解用意的模块、语句要加
以注释;
4、制作调试说明
介绍制作调试的过程、结果,以及在过程中出现的问题和解决问题的方法。
5、操作使用说明
介绍所设计“产品”的操作及使用方法。
6、总结说明
介绍本次课程设计的收获、体会或经验教训,要求客观、具体。
报告不要盲目追求篇幅,只要能说清楚问题即可,不必大量拷贝或摘抄资
料文献。正文采用宋体四号字,若用手写,要求字迹工整。
四、进度安排
本课程设计共两周的时间,按10个工作日算,进度安排如下:
明确设计任务,调研、查阅资料,构思、确定总体方案,用两天时间; 设计硬件电路,设计软件功能,画程序流程图,用一天时间;
设计程序结构,编写程序,用两天时间;
通过计算机仿真验证调试程序,用一天时间;
制作硬件电路,用一天时间;
通过硬件电路验证调试程序,用一天时间;
撰写设计报告,验收设计成果,用两天时间。
五、成绩评定
及格标准如下:
1、按期完成设计并提交设计报告和交验根据设计制作的实物,出勤良好;
2、报告的内容、格式符合要求,能反映设计过程的实际情况,设计制作的实物的功能和性能基本能达到设计任务的要求。
在及格的基础上,根据设计成果的质量酌情评定为优秀、良好或中等。 不交设计报告或报告的内容大部分是抄来的,以及不交验设计制作的实物
或用别人的实物来交验,出勤很少,将判为不及格。
第四篇:单片机实验
实验
一、MCS51单片机基本开发环境
1. 实验目的:
1)熟悉软件的集成开发环境 2)掌握单片机软件设计流程
3)掌握单片机存贮器结构及各窗口之间的联系 2. 实验内容:
1)用三种方法实现将累加器A内容改为20H
方法1--MOV A,#20H 方法2—MOV R0,#20H MOV A,R0 方法3—MOV R0,#20H XCH A,R0 心得:越往下做实验时就越感觉这题根本不能说是题目,但不得不说在没接触过编程软件,刚开始学的汇编,第一次做的实验就光这道题都觉得不知道做什么.所以凡是总有开始,不了解情况的多简单的都会觉得难.2)将58H位单元置为1,观察内部RAM中2BH内容的变化 代码:
SETB 2BH.0 JMP $ END 心得:这是关于内部存储中对单元和字节了解,不理解很容易做错.比如开始写的指令为
MOV R0,#58H;MOV @R0,#1
这是错误的指令。这就需要认真去了解单片机中的字节地址与位地址的关系。80C51中有位寻址区和字节寻址区。题目中58H为位地址,2BH为字节地址,且58H为2B字节的最低位。由于58H属于位寻址区,可用位操作指令 SETB 进行置位,SETB 2BH.0 执行后,2BH中内容变为01
3)如果当前状态为有进位、工作寄存器使用区2,请用3种方法设置这种状态
代码:
ANL PSW,#01H MOV A,PSW
CJNE A,#01,LAB2 LAB1:JMP LAB1
LAB2: SETB PSW.4 MOV P0,#01H MOV R0,#18H CLR PSW.3 MOV C,P0.0 MOV PSW,R0 MOV PSW.4,C CPL C MOV PSW.3,C END
心得:以上LAB2写了三段代码,可分别完成题目要求。不过实验时只是对代码进行了错误调试,没有对结果进行检验。其中值得注意的是对于布尔(位)操作指令的用法,比如传送指令必须经累加器C,如第二段中MOV P0,#01H;MOV C,P0.0,以及对于位寻址的方式(如需用到“.”隔开)的应用。4)编一个小程序将内部RAM中的20H单元的内容送到21H单元并调试
代码:
MOV R0,#20H MOV @R0,#10H MOV R1,#21H MOV @R1,20H JMP $ END
5)用程序将堆栈指针指向60H,然后在堆栈中依次压入01,02,03,04,05五个数,观察哪些单元内容发生了变化,各变为多少?从哪些窗口可以发现这些变化?顺序将堆栈中的五个数放入30H~34H五个单元中,编程实现之。
代码:
MOV R1,#60H MOV SP,R1 MOV DPL,#1H LAB1:PUSH DPL INC DPL MOV A,DPL CJNE A,#6,LAB1 POP 34H POP 33H POP 32H POP 31H POP 30H JMP $ END
6)将外部数据存贮器1000H~100FH 16个单元中存放00H~0FH 代码:
MOV DPTR,#1000H MOV R1,#10H LOOP:MOVX @DPTR,#1234H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END
心得:此处需要访问片外存储空间,需要借助寄存器DPTR,需注意其为16位的寄存器,在使用时若与八位寄存器进行数据交换时需分为高八位DPH与低八位DPL来用。7)若要求程序从0010H单元开始运行,可用两种方法实现?
方法一 ORG 0010H 方法二 AJMP 0010H
3. 选做实验内容:数据传送 目的:
1)掌握8051单片机内部数据存贮器、外部数据存贮器的数据传送特点和应用 2)掌握MOV,MOVX和MOVC类指令的用法及区别 内容:
1)将片内RAM数据区20H为首地址的十六个字节传送到30H为首地址的数据区,即:20H~2FH送30H~3FH
代码: ORG 0000H JMP MAIN ORG 0030H MAIN:MOV R0,#20H MOV R1,#30H LOOP:MOV @R0,#1234H MOVA,@R0 MOV @R1,A INC R0 INC R1 CJNE R1,#30H,LOOP JMP $ END
2)将外部数据存储器2000H~200FH单元的十六个数传送至内部数据存储器的30H~3FH 代码: ORG 0000H JMP MAIN ORG 0030H MAIN: MOV DPTR,#2000H MOV R1,#30H LOOP:MOVX @DPTR,#12H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END
总体心得体会:
第一次做实验主要是熟悉了解了下单片机编程软件的使用,开始接触时在对其软件不是太了解的情况下实验编程做的确实很乱,不清楚该怎样进行,比如不知如何进行对指令的调试,也不清楚该如何观察结果,没有一个整体的概念,所以在了解其开发环境上花了不少时间。经过一段时间的摸索后也终于了解了其具体的使用,也能够顺利的对指令的编程运用。运行指令时遇到的一些问题需要注意的也在上面各题中做了说明。还有需要注意的是:进入软件仿真时需要对存储空间进行查看的方法是在Address窗口中输入:d:00h 显示内部数据存储器从00h开始的单元; x:1000h 显示外部数据存储器从1000h开始的单元; c:0000H 显示程序存储器内容。还有由于伪指令 END 定义的原因,在程序末需加一条死循环调转指令(如 JMP $)使程序不会进入其他未知空间执行其他指令。实验
二、加、减法实验
1. 实验目的
1)正确使用单片机的加减运算指令
2)掌握不同指令对于程序状态字的影响及程序状态字的意义、用处 3)掌握ADD,ADDC,SUBB和DA A等指令的用法 4)学习模块化程序设计方法 2. 实验内容
1)编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。程序入口为: 加数:22H,21H,20H三字节,22H为最高位
被加数:32H,31H,30H三字节,32H为最高位
程序出口为: 23H,22H,21H,20H四字节,23H为最高位 例如:地址:23 22 21 20 32 31 30 执行前数据: 01 23 45 FF 01 01 执行后数据:01 00 24 46
代码:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 22H,#01H MOV 21H,#23H MOV 20H,#45H MOV 32H,#0FFH MOV 1H,#01H MOV 30H,#01H ACALL ADDI HERE:JMP HERE ORG 100H ADDI: PUSH PSW MOV R0, #20H;加数1地址、和的地址 MOV R1, #30H;加数2地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 ADDC A, @R1;加 MOV @R0, A;存 INC R0 INC R1 DJNZ R2, LOOP CLR A ADDC A, #0;得到进位 MOV 23H, A;保存 POP PSW RET END
2)编写三字节二进制减法子程序 入口:被减数: 52H,51H,50H, 50H为最低位
减数: 42H,41H,40H, 40H为最低位
出口:差:外部数据存贮器2003H~2000H(2000H为最低位)用主程序调用多组数据来调试,需考虑无借位和有借位两种情况。例如:
执行前:地址: 52 51 50 42 41 40
数据: 90 80 70 10 10 10
执行后:地址: 2003 2002 2001 2000
数据: 00 80 70 60 代码:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 52H,#90H MOV 51H,#80H MOV 50H,#70H MOV 42H,#10H MOV 41H,#10H MOV 40H,#10H ACALL SUB1 HERE:JMP HERE SUB1: PUSH PSW MOV R0, #50H;被减数地址 MOV R1, #40H;减数地址 MOV DPTR, #2000H;差的地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 SUBB A, @R1;减 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP CLR A SUBB A, #0;得到借位 MOVX @DPTR, A;存 POP PSW RET END
3)编写10位十进制加法子程序(十进制数采用压缩BCD码存放)入口: 加数:24H—20H,低地址放低字节
被加数:29H—25H,低地址放低字节
出口 和:4005H—4000H,低地址放低字节
要求调用多组数据调试,注意观察PSW的变化,理解DA A指令的含义。例如:
执行前地址:24 23 22 21 20 29 28 27 26 25
数据:12 34 56 78 90 88 99 33 12 74
执行后地址:4005 4004 4003 4002 4001 4000
数据: 01 01 33 89 91 64
代码:
ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 24H,#12H MOV 23H,#34H MOV 22H,#56H MOV 21H,#78H MOV 20H,#90H MOV 29H,#88H MOV 28H,#99H MOV 27H,#33H MOV 26H,#12H MOV 5H,#74H ACALL ADD2 HERE:JMP HERE ADD2: PUSH PSW MOV R0, #20H;加数1地址 MOV R1, #25H;加数2地址 MOV DPTR,#4000H CLR C MOV R2, #5;循环5次 LOOP: MOV A, @R0;取 ADDC A, @R1;加
DA A;调整为BCD码 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP POP PSW RET END
第五篇:单片机实验
实验一清0、移数
将片内20H~2FH及片外0010H~001FH单元清0;
然后将片内30H~3FH的数据移到片外0000H~000FH中;判断:
若(30H)≤10,则求其平方存到31H中,并将位00H置1(其它位清0)若(30H)=10,则将AA存到31H中,并位01H置1(其它位清0)若(30H)≥10,则减10存到31H中,并位02H置1(其它位清0)
实验二加法、排序
有两个长度为10的无符号数分别放在片内20H和30H为首的存储单元中(低位),求其对应项之和(带进位位),结果放在40H为首的单元中(若最高位有进位则存在后续单元中),然后按升序排列放在50H为首的单元中
实验三查表、散转
设有一表格,表中数为:00H、11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH。根据片外0001H单元的低4位的数,取出表中相应的值存到片内30H中;根据片外0001H单元的高4位的数,将片内RAM区中可位寻址的相应的位置1(从位00H~位0FH,只可有一个位地址为1)
实验四外中断
P1.0~P1.7接8个发光二极管,管脚INT0、INT1接两个按键,分别定义为“L”和“R”。
要求:上电全灭,按 “L”(或R)键,最右(左)侧灯亮,每按一次“L” ”(或R)键,则亮的灯向左(右)移一位,当移到最左(右)端时,灯全灭
实验五定时器
P1.0、P1.1分别接两个发光二极管,INT0脚接
一按键做开关,按一次开关,则启动,两个发
光管一亮一灭,亮灭时间均为1秒;再按一次
开关,则关闭,即两个发光管都灭。
实验六定时器、计数器
P3.2口输出周期为2S的方波,T1口为脉冲输入端,记录输入的脉冲个数,脉冲个数由P1口所接的8个数码管显示(二进制),设一按键作为开关控制系统运行,关闭时数码管全灭,P3.2无输出。