1、51系列单片机试验指导书 张自友乐山师院物电系试验室编印3月第一章 试验系统介绍1.1. 系统组成AEDK5196ET单片机试验系统包含:1. AEDK5196ET试验系统主板(已插上8032CPU芯片);2. U5196ETF测试板(已联接60芯短接电缆);3. 9芯标准串行通讯电缆:1根;4. 4芯电源联接电缆:1根;5. 40芯仿真联接电缆:1根;6. 试验用线束:20根;7. 外部电源:选配件;8. AEDK机电试验平台:选配件;9. 系统软件安装盘:5张;试验系统连接如右图所表示:1.2 基础试验项目1. 软件编程试验,提供MCS-51、MCS-96算术子程序库;2. 单片机本身并行
2、口、串行口、定时/计数器、A/D转换、中止系统等试验;3. 扩展8位存放器试验;4. 扩展简单输入、输出口试验;5. 扩展可编程并行口(8155/8255)试验;6. 扩展可编程串行口(8251)试验;7. 扩展可编程键盘显示控制器(8279)试验;8. 扩展A/D(0809),D/A(0832)转换试验;9. 双色灯显示试验(交通灯);10. 扫描键盘,LED数码管显示试验;11. 计算机音响试验;12. 继电器控制试验;13. 步进电机,直流电机控制试验;14. 标准(CENTRONIC)并行打印机试验;1.3 系统快速入门用户使用本系统进行试验时通常包含以下步骤:开启运行环境-编写试验程
3、序-调试试验程序-进行试验1开启运行环境 正确连接试验系统,确定各个开关处于正确位置,打开试验机电源。运行LCAET软件,进入调试环境。选择主菜单Options菜单进行通讯设置(串行口、波特率设置)和模式设置(CPU类型、试验机状态),和试验机建立通信联络。2.编写试验程序 新建文件,保留成.asm(汇编)或.c(c51)即可。3.调试 打开源语句调试窗口并将目标码加载到试验机。然后用户就能够利用本系统提供多种工具和方法进行调试。关键是观察程序运行是否正常、有没有走飞、各关键参数中间值是否和设计吻合。4.进行试验依据试验相关说明和用户编制程序,完成连线(最好先关闭试验机电源,再进行)。经过调试
4、软件加载、运行程序,观察试验相关现象。若现象和设计不符,则返回第三步,重新进行。14 其它 未尽事宜,请查看系统软件帮助文挡。第二章 MCS51系列单片机试验试验一 I/O口输入输出试验任务:1,实现用p1口输出控制发光二极管亮灭和延时闪烁、左右移动等。 2,实现用拨动开关K0K7控制控制发光二极管L0L7。试验二 定时器及中止试验任务:1,实现计数试验,假如按键5次则点亮发光二极管。 2,实现3秒和5秒定时,并用此信号控制交通灯。 3,外部中止试验:按下按键时,停止发光二极管闪烁。试验三 串口应用试验任务:1,串并转换试验 2串口通信试验试验四 c51编程试验任务:1,控制L0L7左右移动闪
5、烁。 2,对10次ad采样结果排序,输出其平均值说明:1。本指导书不直接提供试验源代码,请试验前先自己依据试验任务编写试验程序。 2基础试验任务完成后,有时间可自己把附录综合设计试验调试。附录:综合设计试验参考1AD转换试验,用中止方法读结果,并在数码管上显示;CS8255-F228H,CS0809-F230H,P3.2-EOC,IN0-05V(硬件连线);PC35-LEDSALEDSC,PC2-LEDSELECT(经过短路套接好);PA07-LEDALEDDP(经过短路套接好);-符号定义-C8255 EQU 0F22BH ;8255命令口地址P8255A EQU 0F228H ;8255
6、PA口地址P8255B EQU 0F229H ;8255 PB口地址P8255C EQU 0F22AH ;8255 PC口地址C0809 EQU0F230H;ADC0809片选信号LED0 DATA 50H ;显存区LED1 DATA 51HLED2 DATA 52H;-主程序- ORG 0000H AJMP MAIN ORG 0003H AJMP FX0 ORG 0030HMAIN: MOV SP,#60H MOV LED0,#00H ;置显示初始值 MOV LED1,#00H MOV LED2,#00H MOV DPTR,#C8255;8255初始化 MOV A,#80H ;8255 PA
7、,PB,PC口输出 MOVX DPTR,A CLRIT0 SETBEX0SETB EA ;开中止 MOVDPTR,#C0809 MOVXDPTR,A ;开启AD转换LOOP: ACALL DISP ;显示子程序 AJMP LOOP ;主循环;-8255驱动数码管显示子程序- DISP: MOV DPTR,#P8255C MOV A,#00H MOVX DPTR,A ;经过8255C口选种第一个数码管MOVDPTR,#LEDSEGMOV A,LED0MOVC A,A+DPTRMOV DPTR,#P8255A ;显示键值 MOVX DPTR,A ;送显示段选码ACALLDELAY ;延时,增加显示
8、亮度 CLR A;带了锁存器,送下一个数据前将数据撤消MOVXDPTR,AMOV DPTR,#P8255C MOV A,#08H MOVX DPTR,A ;经过8255C口选种第二个数码管MOVDPTR,#LEDSEGMOV A,LED1MOVC A,A+DPTRMOV DPTR,#P8255A ;显示键值 MOVX DPTR,A ;送显示段选码ACALLDELAYCLRAMOVXDPTR,AMOV DPTR,#P8255C MOV A,#10H MOVX DPTR,A ;经过8255C口选种第三个数码管MOVDPTR,#LEDSEGMOV A,LED2MOVC A,A+DPTRORLA,#8
9、0H ;加个小数点在最高位后面MOV DPTR,#P8255A ;显示键值 MOVX DPTR,A ;送显示段选码ACALLDELAYCLRAMOVXDPTR,A RET;- ;中止服务程序- FX0: MOV DPTR,#C0809MOVXA,DPTR ;读转换结果MOVB,#5MULAB;相乘结果为16位,再右移8位,则B刚好为整数部分MOVLED2,BMOVB,#10MULAB ;小数部分放大10倍MOVLED1,BMOV B,#10MULABMOV LED0,BFX0_RET:MOVDPTR,#C0809MOVXDPTR,A ;开启AD下一次转换RETI;-延时子程序-DELAY:MO
10、V R7,#5DJNZ R7,$RET;- LED显示常数表- LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;- END2简易函数信号发生器,经过按PULSE+键,切换波形输出;P3.2-PULSE+;CS0832-;-F218;VOUT,AGND-示波器D_APORT EQU 0F218H ;0832 口地址 ORG 0000H AJMP START ORG 0003H AJMP FX0 ORG 0030HSTART: MOV SP,#60H MOV R1,#1 SETB EX0 SETB IT0 SETB EALOOP: ACALL
11、SCAN SJMP LOOP;-方波生成-FANGBO:MOV A,#0FFHMOV DPTR,#D_APORTMOVX DPTR,AACALL DELAYMOV A,#00HMOVX DPTR,AACALL DELAYACALL SCANSJMP FANGBO;-锯齿波生成-JUCHI: MOV A,#00H MOV DPTR,#D_APORTJ_L: MOVX DPTR,A INC A JNZ J_L ACALL SCAN SJMP JUCHI;-正弦波生成-SINE:MOV R0,#0S_L:MOV DPTR,#TABLE MOV A,R0MOVC A,A+DPTRMOV DPTR,#D
12、_APORTMOVX DPTR,AINC R0CJNE R0,#65,S_LACALL SCANSJMP SINE;-中止服务子程序-FX0:INC R1RETI;-按键扫描-SCAN:CJNE R1,#0,N1AJMP FANGBON1:CJNE R1,#1,N2AJMP SINEN2:CJNE R1,#2,N3AJMP JUCHIN3:MOV R1,#0RET;-延时-DELAY:MOV R7,#80DJNZ R7,$RET;-正弦波数据表-TABLE:DB 141,153,165,177,188,199,209,218,227,234,241,246,250,254DB 255,256,
13、255,254,251,246,241,235,227,219,209,199,188,177DB 165,153,141,128,116,103,91,79,68,57,47,38,29,22,15,10,6DB 3,1,0,1,2,5,10,15,21,29,37,47,57,67,79,90,103,115,128 ;-END3,键盘扫描和数码管显示试验;CS8255-F228H ;PB07-LINE18 (键盘列线)已接好;PC01-KEYIN12(键盘行线)已接好;PC35-LEDSALEDSC,PC2-LEDSELECT(经过短路套已接好);PA07-LEDALEDDP(数码管数据
14、线 经过短路套已接好);-C8255 EQU 0F22BH ;8255命令口地址P8255A EQU 0F228H ;8255 PA口地址P8255B EQU 0F229H ;8255 PB口地址P8255C EQU 0F22AH ;8255 PC口地址LED0 DATA 50H ;显存区,同时也是键值存放区;- ORG 0000H AJMP MAIN ORG 0030HMAIN: MOV SP,#60H ;堆栈初始化 MOV LED0,#10H ;置显示初始值 MOV DPTR,#C8255;8255初始化 MOV A,#82H ;PB口输入,PA,PC口输出 MOVX DPTR,A SET
15、BEX0 SETB IT0 ;设置为边缘触发,避免反复数次触发SETB EA ;开中止LOOP: ACALL DISP ;显示子程序 ACALL KEY AJMP LOOP ;循环扫描;- DISP: MOV DPTR,#P8255C MOV A,#00H ;00000000B,LEDSASC,LEDSELECT =0 MOVX DPTR,A ;经过8255C口选种第一个数码管MOVDPTR,#LEDSEGMOV A,LED0MOVC A,A+DPTR ;查段选码MOV DPTR,#P8255A MOVX DPTR,A ;送段选码PUSH 1POP 1NOP ;短暂延时CLR AMOVX DP
16、TR,A ;消除显示 RET; -键盘扫描子程序- KEY:MOV A,#00H ;先判定是否有键按下,行线PC0PC1送00 MOV DPTR,#P8255C MOVX DPTR,A MOV DPTR,#P8255B MOVX A,DPTR ;读列线,读到0,说明按了键 CJNE A,#0FFH,KEY_NEXT ;判键是否按下,有键转KEY_NEXT RET ;无键返回 KEY_NEXT: ACALL D10MS;消除抖动 MOV A,#02H ;键盘扫描第一行(输出行选码) MOV DPTR,#P8255C MOVX DPTR,A MOV DPTR,#P8255B MOVX A,DPTR
17、 ;读列线 CJNE A,#0FFH,KEY_L0 ;判键是否按下,有键转KEY_L0 AJMP KEY_NEXT2 ;无键转第二行 KEY_L0: MOV R5,#0 ;保留行号 AJMP LIE ;转列识别 KEY_NEXT2: MOV A,#01H ;扫描第二行 MOV DPTR,#P8255C MOVX DPTR,A MOV DPTR,#P8255B MOVX A,DPTR CJNE A,#0FFH,KEY_L1;判键是否按下,有键转KEY_L1 RET ;无键转结束KEY_L1: MOV R5,#1 ;保留行号 AJMP LIE ;转列识别 LIE: MOV R0,#08H ;控制循
18、环移位8次,依次扫描列 MOV R6,#0 ;保留列号,初值0LIE_LOOP: RRC A JNC CALC INC R6 DJNZ R0,LIE_LOOPCALC: MOVA,R5 ;计算键值,行*号8+列号 RLA RLA RLA ADDA,R6 MOV LED0,A ;将键值保留到显存区KEYWAIT:MOV DPTR,#P8255B;等候键释放MOVX A,DPTR CJNE A,#0FFH,KEYWAIT KEYEXIT:RET ;- D10MS: MOV R0,#100 ;延时10MS子程序D1: MOV R1,#50 DJNZ R1,$ DJNZ R0,D1 RET ;- ;L
19、ED显示常数表LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79H,71H,00H;- END48255简易数字钟;CS8255-F228H ;PC35-LEDSALEDSC,PC2-LEDSELECT(经过短路套已接好);PA07-LEDALEDDP(经过短路套已接好);-C8255 EQU 0F22BH ;8255命令口地址P8255A EQU 0F228H ;8255 PA口地址P8255B EQU 0F229H ;8255 PB口地址P8255C EQU 0F22AH ;8255 PC口地址LS
20、L DATA 50H ;秒个位 LSH DATA 51H;秒十位LLLDATA 52H;分隔符 -LML DATA 53H;分个位LMH DATA 54H;分十位LLHDATA 55H;分隔符 -LHL DATA 56H;时个位LHH DATA 57H;时十位TIME1DATA 58H;辅助计数变量1TIME2DATA 59H;辅助计数变量2;- ORG 0000H AJMP MAIN ORG000BH AJMPFT0 ORG 0030HMAIN: MOV SP,#60H ACALL INILOOP: ACALL DISP ;显示子程序 AJMP LOOP ;循环扫描INI: MOV LSL,
21、#00H ;置显示初始值 MOV LSH,#00H MOVLLL,#0AH ;-段选码在段选码表中第10个位置 MOV LML,#00H MOV LMH,#00H MOVLLH,#0AH ;- MOV LHL,#00H MOV LHH,#00H ;初始值00-00-00 MOV DPTR,#C8255;8255初始化 MOV A,#80H ;8255 PA,PB,PC口输出 MOVX DPTR,A MOVTMOD,#02H;定时器初始化,定时,方法2(8位自动重装初值) MOV TH0,#164;100微妙定时 MOV TL0,#164 MOVTIME1,#100;辅助计时变量,让100us发
22、生10000次就是1秒 MOV TIME2,#100 SETBET0 SETB EA ;开中止 SETB TR0 ;开启定时器 RET;-显示子程序- DISP: MOVR5,#00H;存放数码管位选码(00H,08,10H,+8)MOVR0,#50H ;第一个数码管显存地址(50H,51H,52H,57H)D_LOOP: MOV DPTR,#P8255C MOV A,R5 ;数码管位选码 MOVX DPTR,A ;经过8255C口选种第一个数码管MOVDPTR,#LEDSEGMOV A,R0 ;送显示内容MOVC A,A+DPTR;查段选码MOV DPTR,#P8255A ; MOVX DP
23、TR,A ;送出显示ACALLDELAY ;延时,增加显示亮度 ; LED0MOVA,R5ADDA,#08HMOVR5,A ;回送R5INCR0;变量修正 CJNER0,#58H,D_LOOP ;8个没显示完,继续显示RET;- FT0: ;中止服务程序DJNZ TIME1,S0MOV TIME1,#100DJNZ TIME2,S0MOV TIME2,#100;统计100*100次INC LSLMOV A,LSLCJNE A,#10,S0MOV LSL,#0INC LSHMOV A,LSHCJNE A,#6,S0MOV LSH,#0 ;秒INC LMLMOV A,LMLCJNE A,#10,S
24、0MOV LML,#0INC LMHMOV A,LMHCJNE A,#6,S0MOV LMH,#0 ;分INC LHLMOV A,LHLCJNE A,#10,S0MOV LHL,#0INC LHHMOV A,LHHMOV B,#10MUL ABADD A,LHL ;判定是否到24时,LHH*10+LHLCJNE A,#24,S0MOV LHH,#0MOV LHL,#0 ;时S0:RETIDELAY:MOV DPTR,#P8255A;带了锁存器,送下一个数据前将数据撤消CLR AMOVXDPTR,ARET;- ;LED显示常数表LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH
25、,7DH,07H,7FH,6FH ;0-9DB40H,00H ;-,全熄灭;- END5, 8255输出锁存器输出PWM信号驱动电机转动;经过K0K7调整256种挡位转速;CS8255-0F228H;8255PA0-C+(模块2);P1.0P1.7-K0K7ORG 0000HAJMP MAINORG 0030HMAIN:MOV SP,#60HMOV DPTR,#0F22BH;8255初始化 MOV A,#80H ;8255 PA,PB,PC口输出 MOVX DPTR,ALOOP:MOV DPTR,#0F228HMOV A,#0FFH MOVX DPTR,A ;PA送高电平ACALL SCAN ACALL DELAY ;高电平连续一定时间(A控制)MOV A,#00HMOVX DPTR,AACALL SCAN CPL A ACALL DELAY;低电平连续一定时间(255-A控制)AJMP LOOP;由A控制延时程序DELAY:INC A ;避免0成为最大值DJNZ Acc,$RET;判定挡位程序SCAN:MOV A,P1 RETEND