1、单片机复习【例1】 编制一个循环闪烁灯的程序。设80C51单片机的P1口作为输出口,经驱动电路74LS240(8反相三态缓冲/驱动器)接8只发光二极管,如图4-8所示。当输出位为“1”时,发光二极管点亮,输出位为“0”时为暗。试编程实现:每个灯闪烁点亮10次,再转移到下一个灯闪烁点亮10次,循环不止。 解:程序如下:FLASH:MOV A,#01H ;置灯亮初值FSH0: MOV R2,#0AH ;置闪烁次数FLOP: MOV P1,A ;点亮 LCALL DY1s ;延时1s MOV P1,#00H ;熄灭 LCALL DY1s ;延时1s DJNZ R2,FLOP ;闪烁10次 RL A
2、;左移一位 LJMP FSH0 ;循环 END ;【例】 在单片机应用系统中,常用LED数码管显示数码,但显示数字(9)与显示数字编码并不相同,需要将显示数字转换为显示字段码,通常是用查表的方法。现要求将30H中的显示数字转换为显示字段码并存入A。已知共阴字段码表首址为TABD。解:编程如下: LED:MOV DPTR,#TABD;置共阴字段码表首址 MOV A,30H ;读显示数字 MOVC A,A+DPTR ;查表,转换为显示字段码 RET ;TABD:DB 3FH,06H,5BH,4FH,66H;04共阴字段码表 DB 6DH,7DH,07H,7FH,6FH;59共阴字段码表START
3、: MOV 30H , #09H LEDON: LCALL LED MOV P1 , A LCALL DELAY_1SDJNZ 30H , LEDONLJMP STARTEND 参照以上例题,按下列要求编写程序:注:可与例1一起参考。 循环显示数字; fosc=6MHz; 显示间隔为1S; 例:显示内存31H36H中内容START2 MOV R0 ,#31H ;待显示数据所在内存首址送R0 MOV R1 ,#01H ; R1=00000001,数码管的选择码送R1 MOV A , R1 ; A=00000001 , 指向第一个数码管LP0:MOV P3 ,A ; 未循环前, P3.0=1,经“
4、非”门后变为零,指向第一个数码管. MOV 30H , R0 ; 待显示数据送A LCALL LED MOV P1 ,A ; 段码送P1口,由被选中的数码管显示 LCALL DELAY_1MS ; 延时1 毫秒 INC R0 ; R0内容加1,指向下一个存储单元 MOV A ,R1 ; 选择数码管的数据送A. RL A ; A循环左移一位, 00000001变为00000010,指向下一个数码管 JB ACC.6 , LP2 ; 若A的第6位为1,转向LP2, 否则往下执行 MOV R1 , A ; 下一个数码管的选择码送R1 LJMP LP0 ; 6个数码管未显示完,继续.LP2: LJMP
5、 START2 4511真值表【例】试编制程序显示数字987解: MOV P1,#F7H ;输出个位显示数7 CLR P1.4 ;选通个位,P1.4=0 MOV P1,#F8H ;输出十位显示数8 CLR P1.5 ;选通十位, P1.5=0 MOV P1,#F9H ;输出百位显示数9 CLR P1.6 ;选通百位, P1.6=0 RET一、独立式键盘接口驱动程序:LP: MOV C, P1.0 JC LPKEY: . . SJMP LP独立式键盘与单片机接口独立式键盘与单片机接口(图1)ORG 0030H KB:MOV P1,#0FFH ;置P1口为输入口 MOV A,P1 ;读键状态 CP
6、L A ANL A,#0FH ;屏蔽高4位 JZ KB ;无键闭合则返回 LCALL D10MS ;延时去抖动 MOV A,P1 ;再读键状态 CPL A ANL A,#0FH JZ KB ;无键闭合则返回 CJNE A,#01H,KB01 INC 20H ;K1键闭合,20H单元加1 LJMP KBKB01:CJNE A,#02H,KB02 DEC 20H ;K2键闭合,20单元减1 SJMP KB KB02:CJNE A,#04H,KB03 MOV 21H,#00H ;K3键闭合,21H单元清0 LJMP KB KB03:CJNE A,#08H,KB MOV 21H,#0FFH ;K4键闭
7、合,21H单元置FF SJMP KB ;若有两键以上闭合则返回 END 中断系统应用举例【例】 出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,从外中断(P3.2)引脚输入,行驶里程为轮胎周长运转圈数,设轮胎周长为2m,试实时计算出租车行驶里程(单位米),数据存32H、31H、30H。 解:编程如下: ORG 0000H ;复位地址 LJMP STAT ;转初始化 ORG 0003H ;中断入口地址 LJMP INT ;转中断服务程序 ORG 0100H; 初始化程序首地址 STAT: MOV SP,#60H ; 置堆栈指针 SETB IT0 ; 置边沿触发方式 MOV IP,#01H ;
8、置高优先级MOV IE,#81H ;开中 MOV 30H,#0 ;里程计数器清0 MOV 31H,#0 ; MOV 32H,#0 ; SJMP $ ; 等待中断 ORG 0200H ;中断服务子程序首地址 INT: PUSH Acc ;保护现场 PUSH PSW ; MOV A,30H ;读低8位计数器 ADD A,#2 ;低8位计数器加2m MOV 30H,A ;回存 CLR A ; ADDC A,31H ;中8位计数器加进位 MOV 31H,A ;回存 CLR A ; ADDC A,32H ;高8位计数器加进位 MOV 32H,A ;回存 PUSH PSW ;恢复现场 PUSH Acc ;
9、 RETI ;中断返回一. 定时/计数器概述 80C51单片机内部有两个16位定时/计数器T0和T1,其核心是计数器,基本功能是加1。 对外部事件脉冲(下降沿)计数,是计数器; 对片内机器周期脉冲计数,是定时器。 定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入(T0/P3.4 T1/P3.5)。且外部脉冲的最高频率不能超过时钟频率的1/24。 工作方式116位计数器,最大计数值为216 = 65536。 工作方式2 图 方式 2(初始常数自动重装载) 8位计数器,仅用TL0计数,最大计数值为256,计满溢出后,一方面进位TF0,使溢出标志TF0 = 1;另一方面,使原来装在TH0中
10、的初值装入TL0。【例1】 已知晶振6MHz,要求定时0.5mS,试分别求出T0工作于方求出T0工作于方式0、方式1、方式2、方式3时的定时初值。 工作方式1: T0初值 =216-500s/2s=65536250=65286=FF06H TH0=FFH;TL0=06H。 工作方式2: T0初值 =28-500s/2s=256-250=6 TH0=06H;TL0=06H。 计算定时初值 T0初值 =216-50000s/1s =6553650000=15536=3CB0H TH0=3CH;TL0=B0H 设置TMOD: 0000 0 0 01 B = 01H T0方式1 T0用作定时器 与 无
11、关 T1控制位【例】有一生产流水线,流水线上通过的工件经光电转换电路产生计数脉冲,脉冲整形后送入T0端,要求每生产100个工件,向P1.0发出一包装命令正脉冲,包装成一箱,请编写控制程序。【例】设MCS-51单片机系统的晶振频率为12M,编程测试外部脉冲输入引脚INT0(P3.2)上输人的正脉冲宽度(设正脉冲宽度小于65ms),并将测量数值以us为单位存放于R1 ,R2中。当GATE=1 时, T0的工作不仅由TR0控制,还受引脚INT0电平控制,只有当TR0为 l ,且INT0输入高电平时,定时器T0才会启动。利用这个功能,可以测试外部脉冲输入引脚INT0上输入的正脉冲宽度。【例】 从P1.
12、0输出方波信号,周期为2 ms。 设单片机的focs=12MHz。(C51) 周期为2ms的方波要求定时间隔1 ms,每次时间到P1.0取反。 定时器计数率为 fosc/12, Tcy = 12/fosc = 1 s。 每个机器周期定时器计数加1, 1 ms = 1000 s,需计数次数为1000/(12/fosc) = 1000/1 = 1000。 由于计数器向上计数,为得到l000个计数之后的定时器溢出,必须给定时器赋初值65536-1000,C语言中相当于-1000。80C51扩展外RAM时典型连接电路【例】试编制程序,从外部RAM6264起始地址(6000H)处读入数据,共16个数据,
13、存入以30H为首址的内RAM。IND: MOV DPTR,#6000H ;置外RAM地址 MOV R0,#30H ;置内RAM数据存储区首址IND0: MOVX A,DPTR ;输入数据 MOV R0,A ;存数据 INC R0 ;指向下一存储单元CJNE R0,#40H,IND0 ;判16个数据读完否?未完继续 RET 8-3 A/D转换接口电路一、A/D转换的基本概念 A/D转换的功能是把模拟量电压转换为N位数字量。 常见的N为8、10、128-4 D/A转换接口电路一、D/A转换的基本概念 D/A转换将N位数字量转换为相应的模拟量。 设D为N位二进制数字量,UA为电压模拟量,UREF为参考电压,其转换关系为: UA = DUREF /2N (其中:D=D020+D121+ +DN-12N-1)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1