单片机技术逻辑笔实训报告.docx
《单片机技术逻辑笔实训报告.docx》由会员分享,可在线阅读,更多相关《单片机技术逻辑笔实训报告.docx(17页珍藏版)》请在冰豆网上搜索。
单片机技术逻辑笔实训报告
单片机技术实训报告
逻辑笔
单片机技术实战
一、目的和作用
使学生加深对单片机原理的认识,提高学生的创新能力和动手能力,提升学生综合素质。
二、设计要求
a.逻辑显示:
低电平:
绿灯亮;高电平:
红灯亮;电平变化:
黄灯亮
b.电平变化锁存:
一旦电平有变化(0->1或1->0)则锁定黄灯
c.数值显示:
4位LED
d.脉宽测量:
测量范围:
10μs~9999μs
最小分辨:
1μs
三、设计过程
(一)硬件设计:
1.设计过程说明:
根据题目设计要求,本人将此作品通过开关S1的状态分两种功能运行方式:
1)逻辑电平测试显示;2)脉宽测量和数值显示。
运行逻辑电平测试时,通过开关状态来判断需要不需要进入状态锁定。
运行测脉宽时,采用根据INT0,INT1口的状态开始计数,计数完后判断有无超过9999uS,有则分屏显示。
在测脉宽过程中,可以分别对正负脉宽进行测试。
本作品测试范围通过上下限的扩展,可以达到4uS~65536uS。
2.单元电路及原理说明:
①、逻辑笔探头的设计:
如图1,为了提高测试范围和精度,本设计采用INT0,INT1两个口,在测试脉宽的过程中,因为GATE=1,计数器的运行受到INT0,INT1两个口状态的控制,所以实现了测电平时两个口交错并用。
但为了避免两个口的相互影响,在两个口的输入端分别接入非门74HC04,同时也提高了探头的输入阻抗,提高测试灵敏度。
图1
②、按钮功能复用:
为了节省硬件资源和成本,本设计采用功能复用,具体体现在充分利用复位按钮上,如图2。
当测试逻辑电平时,按S4,可以切换锁定和不锁定状态;当在测试和显示脉宽时,按S4可以切换测试和显示正负脉宽。
图2
③、逻辑电平的状态显示:
如图3,当测试到高电平时,此时,P0.0输出低电平,红灯d1亮;当测试到低电平时,此时,P0.2输出低电平,绿灯d3亮;当测试到有电平变化时,此时,P0.1输出低电平,黄灯d2亮.
图3
④、显示部分原理:
如图4
图4
3.电气原理图:
如附录1中的图
(一)。
(二)软件设计
软件流程图:
如附录2的图
(二)。
流程图说明:
该程序可根据切换开关S1的状态
(1)实现对电平和(0)实现对正负脉宽的测量。
电平测量:
高电平时亮红灯,低电平时亮绿灯,不定时亮黄灯。
进入锁定状态后,则锁定黄灯的状态,但同时还能测高、低电平的变化;脉宽测量:
可根据开关S4的状态来选择要测的是正脉冲还是负脉冲的宽度,然后通过计数,同时判断有无超出范围和是否需要分屏显示。
程序清单:
如附录3。
四、实验的内容和步骤
(一)准备阶段
熟悉单片机仿真系统的使用方法:
注意仿真头的硬件设置和伟福软件的设
置。
注意位操作:
如MOVA,20H和MOVC,20H的区别。
将单片机程序输入计算机并软件仿真,排除语法错误:
如MOVA,@A+DPTR应改为MOVCA,@A+DPTR
MOVA,#FFH应改为MOVA,#0FFH
(二)焊装
布局:
合理排版,充分利用空间,并注意单片机插座周边不要接较高的器
件方便插拔仿真头。
连线构想:
根据布局设想好走线路径和方式。
焊装:
根据布局和连线焊接器件和导线,检查时注意有无虚焊,芯片输入端有无浮空、输出端有无短接。
(三)调试
调试步骤:
根据功能模块:
1)硬件基本功能;2)软件基本功能。
1)硬件基本功能:
在不插入芯片的时候通电,用万用表测量插座电源和地端的电压是否正常;在LED接单片机端通以低电平看是否有预期效果;用万用表测量开关的工作是否正常;给LED七段码显示管(共阴极)通低电平看各段码制是否有损坏。
2)软件基本功能:
程序编译通过后用伟福仿真器的单步执行,看当中断口通不同电平时能不能产生中断和开、关计数器;HEX转BCD和显示程序作为一个模块测试:
让特定单元赋予一定的值,看运行后结果是否正确,若使转换值后的值相等,则可用同时验证显示码的正确与否。
整机功能:
A功能实现;
B功能实现;
C功能实现;
D功能实现(4位测试基本无误差,5位数测试有误差);(创新功能:
可以测量范围达到4uS~65536uS,能分屏显示。
)
五、自检报告
功
能
自
测
自检项目
校验数据
功能实现或实测数据
高电平测试
高电平
亮红灯;锁定时亮黄灯
低电平测试
低电平
亮绿灯;锁定时亮黄灯
电平负跳变
1->0
亮黄灯
电平正跳变
0->1
亮黄灯
脉宽测量功能调试
30μs脉宽
30
31μs脉宽
31
300μs脉宽
300
3000μs脉宽
3000
创新功能调试
4μs
4或3
显示±脉宽
焊装自检
布局
良好
走线
良好
可靠性
优
文档自检
原理图
有
PCB图
无
NETLISTCHECK报告情况
无
自评成绩
90
合作者
无
六、讨论
调试中出现的故障及排除过程
1)LED不能亮:
检查硬件电路有无接错;LED有无接反;LED有无烧坏。
2)不能产生中断或中断效果:
检查硬件电路有无接错;程序中有无中断入口或中断子程序。
3)显示乱码:
数据表TAB有没有正确,检查显示部分电路有无接错;164芯片的输入端有无浮空;根据串口输送顺序和电路接线看有无编码错误或用伟福仿真器时给SBUF赋值看显示值对应出编码。
附录1图
(一)
附录3程序如下
REDEQUP0.0
YELLOWEQUP0.1
GREENEQUP0.2
ORG0000H
LJMPSTART
ORG0003H
LJMPINTT0
ORG0013H
LJMPINTT1
ORG0030H
START:
MOVR4,#08H
MOVR0,#30H
CLEAR:
MOV@R0,#00H
INCR0
DJNZR4,CLEAR
CLRPSW
MOVC,20H
CPLC
MOV20H,C
MOV20H,#00H
MOV21H,#01H
;MOV23H,#00H
movIE,#00000101B
MOVIP,#00H
MOVTCON,#00H
MOVSP,#70H
MOVTMOD,#99H
MOVTH0,#00H
MOVTL0,#00H
MOVTH1,#00H
MOVTL1,#00H
SETBTR0
SETBTR1
XIANSHI:
JBP1.0,LUOJI
INC23H
JNB23H.0,FU
ZHENG:
JnBP3.3,ZHENG
jbp3.3,$
movTH1,#00
MOVTL1,#00
jnbp3.3,$
jbp3.3,$
MOV40H,TH1
MOV41H,TL1
ZHENG1:
SETBGREEN
SETBYELLOW
CLRRED
MOVR6,40H
MOVR7,41H
LCALLBCD
MOVA,34H
JNZFENPING
LCALLDISP
FENPING:
MOVR5,#60H
LCALLDISPF1
LJMPZHENG
FU:
JBP3.2,FU
jNbp3.2,$
movTH0,#00
MOVTL0,#00
jbp3.2,$
jNbp3.2,$
MOV50H,TH0
MOV51H,TL0
FU1:
SETBRED
SETBYELLOW
CLRGREEN
MOVR6,50H
MOVR7,51H
LCALLBCD
JNZFFENPING
LCALLDISP
FFENPING:
MOVR5,#60H
LCALLDISPF1
LJMPFU
LUOJI:
setbEA
XIANSHI2:
JNBP1.0,XIANSHI
JMPXIANSHI2
INTT0:
PUSHA
SETB20H.0
MOVA,20H
XRLA,21H
JZN0
JnB20H,LOCK0
LCALLYELLNS
JMPN0
LOCK0:
CLRYELLOW
N0:
SETBGREEN
CLRRED
POPA
reti
INTT1:
PUSHA
CLR21H.0
MOVA,20H
XRLA,21H
JZN1
JnB20H,LOCK1
LCALLYELLNS
JMPN1
LOCK1:
CLRYELLOW
N1:
SETBRED
CLRGREEN
POPA
RETI
YELLNS:
CLRYELLOW
CALLDELAY65
SETBYELLOW
CLR20H.0
SETB21H.0
RET
;*******************************************************************
;双字节十六进制整数转换成双字节BCD码整数
;入口条件:
待转换的双字节十六进制整数在R6、R7中。
;出口信息:
转换后的三字节BCD码整数在R3,R4、R5中。
;最后存放在显示单元34H~30中。
;影响资源:
PSW、A、R2~R7堆栈需求:
2字节
;*******************************************************************
BCD:
MOVR4,A;BCD码初始化
MOVR5,A
MOVR2,#10H;转换双字节十六进制整数
BCD2:
MOVA,R7;从高端移出待转换数的一位到CY中
RLCA
MOVR7,A
MOVA,R6
RLCA
MOVR6,A
MOVA,R5;BCD码带进位自身相加,相当于乘2
ADDCA,R5
DAA;十进制调整
MOVR5,A
MOVA,R4
ADDCA,R4
DAA
MOVR4,A
MOVA,R3
ADDCA,R3
MOVR3,A;双字节十六进制数的万位数不超过6,不用调整
DJNZR2,BCD2;处理完16bit
MOVA,R5;将各个字节的高低位分别存放
ANLA,#0FH
MOV30H,A
MOVA,R5
SWAPA
ANLA,#0FH
MOV31H,A
MOVA,R4
ANLA,#0FH
MOV32H,A
MOVA,R4
SWAPA
ANLA,#0FH
MOV33H,A
MOVA,R3
ANLA,#0FH
MOV34H,A
ret
;********************************************************************************
;入口:
显示数据从高到低分别放在33H~30H
;出口:
由RXD,TXD口输出显示。
;********************************************************************************
DISP:
movr2,#05
DISP0:
MOV45H,#7FH;赋位选值
MOV46H,#0BFH
MOV47H,#0DFH
MOV48H,#0EFH
MOVDPTR,#TAB
MOVSCON,#00H
MOVA,33H
JNZL0;检测高位是否为0
MOVA,32H
JNZL1
MOVA,31H
JNZL2
LJMPL3
L0:
MOVA,33H;显示千位
MOVCA,@A+DPTR
LCALLSEND
MOVA,48H
LCALLSEND
LCALLDELAY5;显示延时
L1:
MOVA,32H;显示百位
MOVCA,@A+DPTR
LCALLSEND
MOVA,47H
LCALLSEND
LCALLDELAY5;显示延时
L2:
MOVA,31H;显示十位
MOVCA,@A+DPTR
LCALLSEND
MOVA,46H
LCALLSEND
LCALLDELAY5;显示延时
L3:
MOVA,30H;显示个位
MOVCA,@A+DPTR
LCALLSEND
MOVA,45H
LCALLSEND
LCALLDELAY5
djnzr2,disp0;显示延时
ret
;**********************************************************
;分屏显示,显示第一屏,显示数据从高到低分别放在37H~34H
;**********************************************************
DISPF1:
movr2,#05
DISPF10:
MOV45H,#7FH;赋位选值
MOV46H,#0BFH
MOV47H,#0DFH
MOV48H,#0EFH
MOVDPTR,#TAB
MOVSCON,#00H
MOVA,37H
JNZLF10;检测高位是否为0
MOVA,36H
JNZLF11
MOVA,35H
JNZLF12
LJMPLF13
LF10:
MOVA,37H;显示千位
MOVCA,@A+DPTR
LCALLSEND
MOVA,48H
LCALLSEND
LCALLDELAY5;显示延时
LF11:
MOVA,36H;显示百位
MOVCA,@A+DPTR
LCALLSEND
MOVA,47H
LCALLSEND
LCALLDELAY5;显示延时
LF12:
MOVA,35H;显示十位
MOVCA,@A+DPTR
LCALLSEND
MOVA,46H
LCALLSEND
LCALLDELAY5;显示延时
LF13:
MOVA,34H;显示个位
MOVCA,@A+DPTR
LCALLSEND
MOVA,45H
LCALLSEND
LCALLDELAY5
DJNZR5,dispF10;显示延时
movR5,#50H
;**********************************************************
;分屏显示,显示第二屏,显示数据从高到低分别放在33H~30H
;**********************************************************
DISPf2:
MOV45H,#7FH;赋位选值
MOV46H,#0BFH
MOV47H,#0DFH
MOV48H,#0EFH
MOVDPTR,#TAB
MOVSCON,#00H
MOVA,33H
JNZLf20;检测高位是否为0
MOVA,32H
JNZLf21
MOVA,31H
JNZLf22
LJMPLf23
Lf20:
MOVA,33H;显示千位
MOVCA,@A+DPTR
LCALLSEND
MOVA,48H
LCALLSEND
LCALLDELAY5;显示延时
Lf21:
MOVA,32H;显示百位
MOVCA,@A+DPTR
LCALLSEND
MOVA,47H
LCALLSEND
LCALLDELAY5;显示延时
Lf22:
MOVA,31H;显示十位
MOVCA,@A+DPTR
LCALLSEND
MOVA,46H
LCALLSEND
LCALLDELAY5;显示延时
Lf23:
MOVA,30H;显示个位
MOVCA,@A+DPTR
LCALLSEND
MOVA,45H
LCALLSEND
LCALLDELAY5
DJNZR5,dispf2;显示延时
decr2
mova,r2
jztuichu
baochi:
ljmpDISPF10
tuichu:
ret
SEND:
MOVSBUF,A
JNBTI,$
CLRTI
RET
DELAY5:
MOVR6,#2;延时5ms
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
DELAY65:
MOVR6,#130;延时65ms
D6:
MOVR7,#248
DJNZR7,$
DJNZR6,D6
RET
TAB:
DB3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH
END