资源描述
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. 单片机本身并行口、串行口、定时/计数器、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 系统快速入门
用户使用本系统进行试验时通常包含以下步骤:
开启运行环境->编写试验程序->调试试验程序->进行试验
1.开启运行环境
正确连接试验系统,确定各个开关处于正确位置,打开试验机电源。
运行LCAET软件,进入调试环境。选择主菜单Options菜单进行通讯设置(串行口、波特率设置)和模式设置(CPU类型、试验机状态),和试验机建立通信联络。
2.编写试验程序
新建文件,保留成.asm(汇编)或.c(c51)即可。
3.调试
打开源语句调试窗口并将目标码加载到试验机。然后用户就能够利用本系统提供多种工具和方法进行调试。关键是观察程序运行是否正常、有没有走飞、各关键参数中间值是否和设计吻合。
4.进行试验
依据试验相关说明和用户编制程序,完成连线(最好先关闭试验机电源,再进行)。经过调试软件加载、运行程序,观察试验相关现象。若现象和设计不符,则返回第三步,重新进行。
1.4 其它
未尽事宜,请查看系统软件帮助文挡。
第二章 MCS51系列单片机试验
试验一 I/O口输入输出试验
任务:1,实现用p1口输出控制发光二极管亮灭和延时闪烁、左右移动等。
2,实现用拨动开关K0~K7控制控制发光二极管L0~L7。
试验二 定时器及中止试验
任务:1,实现计数试验,假如按键5次则点亮发光二极管。
2,实现3秒和5秒定时,并用此信号控制交通灯。
3,外部中止试验:按下按键时,停止发光二极管闪烁。
试验三 串口应用试验
任务:1,串并转换试验
2.串口通信试验
试验四 c51编程试验
任务:1,控制L0~L7左右移动闪烁。
2,对10次ad采样结果排序,输出其平均值
说明:1。本指导书不直接提供试验源代码,请试验前先自己依据试验任务编写试验程序。
2.基础试验任务完成后,有时间可自己把附录综合设计试验调试。
附录:综合设计试验参考
1.AD转换试验,用中止方法读结果,并在数码管上显示
;CS8255----F228H,CS0809----F230H,P3.2----EOC,,IN0---0~5V(硬件连线)
;PC3~5-----LEDSA~LEDSC,PC2-------LEDSELECT(经过短路套接好)
;PA0~7-----LEDA~LEDDP(经过短路套接好)
;-------符号定义-------------------------------------------
C8255 EQU 0F22BH ;8255命令口地址
P8255A EQU 0F228H ;8255 PA口地址
P8255B EQU 0F229H ;8255 PB口地址
P8255C EQU 0F22AH ;8255 PC口地址
C0809 EQU 0F230H ;ADC0809片选信号
LED0 DATA 50H ;显存区
LED1 DATA 51H
LED2 DATA 52H
;--------主程序---------------------------------------
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP FX0
ORG 0030H
MAIN: MOV SP,#60H
MOV LED0,#00H ;置显示初始值
MOV LED1,#00H
MOV LED2,#00H
MOV DPTR,#C8255 ;8255初始化
MOV A,#80H ;8255 PA,PB,PC口输出
MOVX @DPTR,A
CLR IT0
SETB EX0
SETB EA ;开中止
MOV DPTR,#C0809
MOVX @DPTR,A ;开启AD转换
LOOP: ACALL DISP ;显示子程序
AJMP LOOP ;主循环
;-------------8255驱动数码管显示子程序-------------------------------
DISP: MOV DPTR,#P8255C
MOV A,#00H
MOVX @DPTR,A ;经过8255C口选种第一个数码管
MOV DPTR,#LEDSEG
MOV A,LED0
MOVC A,@A+DPTR
MOV DPTR,#P8255A ;显示键值
MOVX @DPTR,A ;送显示段选码
ACALL DELAY ;延时,增加显示亮度
CLR A ;带了锁存器,送下一个数据前将数据撤消
MOVX @DPTR,A
MOV DPTR,#P8255C
MOV A,#08H
MOVX @DPTR,A ;经过8255C口选种第二个数码管
MOV DPTR,#LEDSEG
MOV A,LED1
MOVC A,@A+DPTR
MOV DPTR,#P8255A ;显示键值
MOVX @DPTR,A ;送显示段选码
ACALL DELAY
CLR A
MOVX @DPTR,A
MOV DPTR,#P8255C
MOV A,#10H
MOVX @DPTR,A ;经过8255C口选种第三个数码管
MOV DPTR,#LEDSEG
MOV A,LED2
MOVC A,@A+DPTR
ORL A,#80H ;加个小数点在最高位后面
MOV DPTR,#P8255A ;显示键值
MOVX @DPTR,A ;送显示段选码
ACALL DELAY
CLR A
MOVX @DPTR,A
RET
;----------- ;中止服务程序----------------------------------------------
FX0: MOV DPTR,#C0809
MOVX A,@DPTR ;读转换结果
MOV B,#5
MUL AB ;相乘结果为16位,再右移8位,则B刚好为整数部分
MOV LED2,B
MOV B,#10
MUL AB ;小数部分放大10倍
MOV LED1,B
MOV B,#10
MUL AB
MOV LED0,B
FX0_RET:
MOV DPTR,#C0809
MOVX @DPTR,A ;开启AD下一次转换
RETI
;----延时子程序-----------------------------------------
DELAY:MOV R7,#5
DJNZ R7,$
RET
;--- LED显示常数表---------------------------------------
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;---------------------------------------------------------
END
2.简易函数信号发生器,经过按PULSE+键,切换波形输出
;P3.2----PULSE+
;CS0832-;-F218
;VOUT,AGND---示波器
D_APORT EQU 0F218H ;0832 口地址
ORG 0000H
AJMP START
ORG 0003H
AJMP FX0
ORG 0030H
START: MOV SP,#60H
MOV R1,#1
SETB EX0
SETB IT0
SETB EA
LOOP: ACALL SCAN
SJMP LOOP
;------方波生成-----------------
FANGBO: MOV A,#0FFH
MOV DPTR,#D_APORT
MOVX @DPTR,A
ACALL DELAY
MOV A,#00H
MOVX @DPTR,A
ACALL DELAY
ACALL SCAN
SJMP FANGBO
;------锯齿波生成---------------
JUCHI: MOV A,#00H
MOV DPTR,#D_APORT
J_L: MOVX @DPTR,A
INC A
JNZ J_L
ACALL SCAN
SJMP JUCHI
;-----正弦波生成------------------
SINE: MOV R0,#0
S_L: MOV DPTR,#TABLE
MOV A,R0
MOVC A,@A+DPTR
MOV DPTR,#D_APORT
MOVX @DPTR,A
INC R0
CJNE R0,#65,S_L
ACALL SCAN
SJMP SINE
;---中止服务子程序--------------
FX0: INC R1
RETI
;----按键扫描--------
SCAN: CJNE R1,#0,N1
AJMP FANGBO
N1: CJNE R1,#1,N2
AJMP SINE
N2: CJNE R1,#2,N3
AJMP JUCHI
N3: MOV R1,#0
RET
;----延时--------
DELAY: MOV R7,#80
DJNZ R7,$
RET
;----正弦波数据表-----------------
TABLE: DB 141,153,165,177,188,199,209,218,227,234,241,246,250,254
DB 255,256,255,254,251,246,241,235,227,219,209,199,188,177
DB 165,153,141,128,116,103,91,79,68,57,47,38,29,22,15,10,6
DB 3,1,0,1,2,5,10,15,21,29,37,47,57,67,79,90,103,115,128
;--------------------------------------
END
3,键盘扫描和数码管显示试验
;CS8255----F228H
;PB0~7------LINE1~8 (键盘列线)已接好
;PC0~1------KEYIN1~2(键盘行线)已接好
;PC3~5-----LEDSA~LEDSC,PC2-------LEDSELECT(经过短路套已接好)
;PA0~7-----LEDA~LEDDP(数码管数据线 经过短路套已接好)
;---------------------------------------------------------
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 0030H
MAIN: MOV SP,#60H ;堆栈初始化
MOV LED0,#10H ;置显示初始值
MOV DPTR,#C8255 ;8255初始化
MOV A,#82H ;PB口输入,PA,PC口输出
MOVX @DPTR,A
SETB EX0
SETB IT0 ;设置为边缘触发,避免反复数次触发
SETB EA ;开中止
LOOP: ACALL DISP ;显示子程序
ACALL KEY
AJMP LOOP ;循环扫描
;---------------------------------------------------------
DISP: MOV DPTR,#P8255C
MOV A,#00H ;00000000B,LEDSA~SC,LEDSELECT =0
MOVX @DPTR,A ;经过8255C口选种第一个数码管
MOV DPTR,#LEDSEG
MOV A,LED0
MOVC A,@A+DPTR ;查段选码
MOV DPTR,#P8255A
MOVX @DPTR,A ;送段选码
PUSH 1
POP 1
NOP ;短暂延时
CLR A
MOVX @DPTR,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 ;读列线
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 ;控制循环移位8次,依次扫描列
MOV R6,#0 ;保留列号,初值0
LIE_LOOP: RRC A
JNC CALC
INC R6
DJNZ R0,LIE_LOOP
CALC: MOV A,R5 ;计算键值,行*号8+列号
RL A
RL A
RL A
ADD A,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
;---------------------------------------------------------
;LED显示常数表
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB 77H,7CH,39H,5EH,79H,71H,00H
;---------------------------------------------------------
END
4.8255简易数字钟
;CS8255----F228H
;PC3~5-----LEDSA~LEDSC,PC2-------LEDSELECT(经过短路套已接好)
;PA0~7-----LEDA~LEDDP(经过短路套已接好)
;---------------------------------------------------------
C8255 EQU 0F22BH ;8255命令口地址
P8255A EQU 0F228H ;8255 PA口地址
P8255B EQU 0F229H ;8255 PB口地址
P8255C EQU 0F22AH ;8255 PC口地址
LSL DATA 50H ;秒个位
LSH DATA 51H ;秒十位
LLL DATA 52H ;分隔符 "-"
LML DATA 53H ;分个位
LMH DATA 54H ;分十位
LLH DATA 55H ;分隔符 "-"
LHL DATA 56H ;时个位
LHH DATA 57H ;时十位
TIME1 DATA 58H ;辅助计数变量1
TIME2 DATA 59H ;辅助计数变量2
;---------------------------------------------------------
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP FT0
ORG 0030H
MAIN: MOV SP,#60H
ACALL INI
LOOP: ACALL DISP ;显示子程序
AJMP LOOP ;循环扫描
INI: MOV LSL,#00H ;置显示初始值
MOV LSH,#00H
MOV LLL,#0AH ;"-"段选码在段选码表中第10个位置
MOV LML,#00H
MOV LMH,#00H
MOV LLH,#0AH ;"-"
MOV LHL,#00H
MOV LHH,#00H ;初始值00-00-00
MOV DPTR,#C8255 ;8255初始化
MOV A,#80H ;8255 PA,PB,PC口输出
MOVX @DPTR,A
MOV TMOD,#02H ;定时器初始化,定时,方法2(8位自动重装初值)
MOV TH0,#164 ;100微妙定时
MOV TL0,#164
MOV TIME1,#100 ;辅助计时变量,让100us发生10000次就是1秒
MOV TIME2,#100
SETB ET0
SETB EA ;开中止
SETB TR0 ;开启定时器
RET
;------显示子程序--------------------------------------
DISP: MOV R5,#00H ;存放数码管位选码(00H,08,10H,,,+8)
MOV R0,#50H ;第一个数码管显存地址(50H,51H,52H,,,57H)
D_LOOP: MOV DPTR,#P8255C
MOV A,R5 ;数码管位选码
MOVX @DPTR,A ;经过8255C口选种第一个数码管
MOV DPTR,#LEDSEG
MOV A,@R0 ;送显示内容
MOVC A,@A+DPTR ;查段选码
MOV DPTR,#P8255A ;
MOVX @DPTR,A ;送出显示
ACALL DELAY ;延时,增加显示亮度 ; LED0
MOV A,R5
ADD A,#08H
MOV R5,A ;回送R5
INC R0 ;变量修正
CJNE R0,#58H,D_LOOP ;8个没显示完,继续显示
RET
;---------------------------------------------------------
FT0: ;中止服务程序
DJNZ TIME1,S0
MOV TIME1,#100
DJNZ TIME2,S0
MOV TIME2,#100 ;统计100*100次
INC LSL
MOV A,LSL
CJNE A,#10,S0
MOV LSL,#0
INC LSH
MOV A,LSH
CJNE A,#6,S0
MOV LSH,#0 ;秒
INC LML
MOV A,LML
CJNE A,#10,S0
MOV LML,#0
INC LMH
MOV A,LMH
CJNE A,#6,S0
MOV LMH,#0 ;分
INC LHL
MOV A,LHL
CJNE A,#10,S0
MOV LHL,#0
INC LHH
MOV A,LHH
MOV B,#10
MUL AB
ADD A,LHL ;判定是否到24时,LHH*10+LHL
CJNE A,#24,S0
MOV LHH,#0
MOV LHL,#0 ;时
S0: RETI
DELAY: MOV DPTR,#P8255A ;带了锁存器,送下一个数据前将数据撤消
CLR A
MOVX @DPTR,A
RET
;---------------------------------------------------------
;LED显示常数表
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0-9
DB 40H,00H ;"-",全熄灭
;---------------------------------------------------------
END
5, 8255输出锁存器输出PWM信号驱动电机转动
;经过K0~K7调整256种挡位转速
;CS8255---0F228H
;8255PA0---C+(模块2)
;P1.0~P1.7------K0~K7
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#0F22BH ;8255初始化
MOV A,#80H ;8255 PA,PB,PC口输出
MOVX @DPTR,A
LOOP: MOV DPTR,#0F228H
MOV A,#0FFH
MOVX @DPTR,A ;PA送高电平
ACALL SCAN
ACALL DELAY ;高电平连续一定时间(A控制)
MOV A,#00H
MOVX @DPTR,A
ACALL SCAN
CPL A
ACALL DELAY ;低电平连续一定时间(255-A控制)
AJMP LOOP
;由A控制延时程序
DELAY: INC A ;避免0成为最大值
DJNZ Acc,$
RET
;判定挡位程序
SCAN: MOV A,P1
RET
END
展开阅读全文