一、使命以及要求
对外部信号脉冲进行计数,并将脉冲个数显现出来。根本要求:计数至少65536个脉冲,并将脉冲个数显现出来。
二、计划挑选
用中止办法进行计数,运用定时器/计数器0的办法2。运用查寻办法进行计数,运用定时器/计数器0的办法1。本程序运用榜首计划进行规划,并能完结计数99999999次
三、体系硬件规划
规划思路
1)、通过按钮发生脉冲信号。
2)、因为按钮按合会呈现机械弹跳进程,使得电平跳变发生屡次。为了战胜按钮颤动而发生的误计数,接入脉冲消抖电路,战胜按钮的颤动现象。
3)、脉冲计数可选用定时器/计数器来完结。
4)、挑选8279作为6位LED显现器的译码驱动电路,完结累进计数。
2、硬件电路组成:
依据硬件规划思路,将用到单片机8031、按纽、脉冲消抖电路,8279芯片电路、6位LED显现器电路用衔接线接好。其间按钮脉冲消抖电路由按钮发生的电平跳变信号经由两个与非门构成的RS触发器进行消抖。依据RS触发器的作业原理,当两个输入端均为1时,触发器输出状况不变;当按钮在两个触点间颤动时,RS触发器的两个输入端均为高电平,触发器输出电平不变;仅当按钮完结一次完好的按合进程后,触发器的输出端才发生一个脉冲,然后消除了按钮按合是颤动的影响。数据显现选用8279芯片衔接LED数码管完结。应依据单片机,确认8279与单片机和与6位LED显现器的接口办法,以及8279芯片的端口地址(8279数据口地址为0000H,8279指令/状况口地址为0001H)
体系程序规划
规划思路:
以定时器/计数器0来对脉冲进行计数,数据用8279芯片衔接LED数码管完结累进显现。程序分为主程序和中止服务程序两部分。主程序首要完结初始化、循环显现。而累计数在中止服务程序中完结。
主程序规划:
1)、完结初始化
包含设置仓库指针、8279芯片初始化、定时器/计数器0初始化、RAM区初始化,以及开中止、发动定时期/计数器0等。
2)、数据循环显现
首先要编写8279初始化子程序和显现一个字符的根本子程序。其间8279初始化子程序为P8279,该子程序功用包含设置8279的作业办法(8个字符显现,左进口,编码扫描键盘,双键确定)以及写相关的指令字(设置分频系数为31、铲除LED显现等)。显现一个字符的子程序为DISLED,该子程序的进口条件为:作业就寄存器R4中寄存待显现字符的LED数码管管号。另在作业寄存器R5中,以非紧缩BCD码的办法寄存带显现字符。一般情况下,如要显现0~9,则在R5中顺次置00H~09H,程序顶用查表的办法找到待显现字符所对应的“段码”。
显现子程序DISP的规划思维是:待显现的六位数据别离以紧缩BCD码的办法寄存在67H、68H、69H和70H四个单元中,该子程序的功用是顺次将寄存在67H、68H、69H和70H中的八个BCD码别离送0#~7#数码管显现。先将其拆开为个位、十位、百位、千位、万位、十万位、百万位和千万位八个非紧缩BCD码的办法,随之先后送作业寄存器R5,一再次调用DISLED子程序。因为在作业寄存器R4中已设置好该数据显现的管号,故即可在0#号管和1#号管完结个位和十位数据的显现。第2次循环中,又可在2#号管和3#号管完结百位和千位数据的显现,第三次循环中,可在4#号管和5#号管完结万位和十万位数据的显现,第四次循环中,可在6#号管和8#号管完结百万位和千万位数据的显现。
3)、主程序清单:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP CTCO
ORG 0030H
MAIN: MOV TMOD, #60H ;设定时器/计数器1为计数办法,作业办法2
MOV TH1,#0FFH ;每发生一个脉冲即发生中止
MOV TL1,#0FFH
MOV67H,#00H
MOV 68H,#00H ;计数器先清零
MOV 69H,#00H
MOV 70H,#00H
MOV SP,#2FH ;仓库指针置初值
MOV R3, #06H ;LED待显现位数送R3
SETB EA
SETB ET0
SETB TR0
PUSH DPH ;8279的初始化
PUSH DPL
PUSH ACC
MOV DPTR, #0001H ;0001H为8279指令和状况口地址
MOV A, #00H ;置8279作业办法(8个字符显现,左进口;编码扫描键盘,双键确定)
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
MOV @R0, #00H ;显现缓冲区清零
INC R0
DJNZ R3, $
CLR A ;累加器清零
LOOP: LCALL DISP
SJMP LOOP
DISP: STEB RS0 ;维护第0组作业寄存器,启用第
一组作业寄存器
MOV R0,#70H ;显现缓冲区首址送R0
MOV R4,#00H
MOV R2,#04H
DIS1: MOV A,@R0
ANL A,#0FH
MOV R5,A
LCALL DISLED
INC R4
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV R5,A
LCALL DISLED
DEC R0
INC R4
DJNZ R2,DIS1
RET
DISLED: PUSH DPH ;显现字符子程序
PUSH DPL
PUSH ACC ;A入栈维护
MOV A,#80H
ADD A,R4
MOV DPTR,#0001H ;8279指令和状况口地址
MOVX @DPTR,A
MOV DPTR,#LEDSEG ;指向字形表首地址
MOV A,R5
MOVC A,@A+DPTR ;查表获得字形码
MOV DPTR,#0000H ;8279数据口地址
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
LEDSEG: DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,
DB 07FH,6FH,77H,7CH,39H,5EH,79H,71H ;
中止服务程序规划
1)、中止服务程序规划思路:
定时器/计数器0设置为作业办法2,并规划时器处值为FFH。这样只要来一个脉冲,计时器就溢出而发生中止,进入中止程序使67H、68H、69H、70H四个计数单元的值完结累加。
2)、中止服务程序清单:
ORG 1000H
CTCO: PUSH ACC
MOV A,70H
ADD A,#01H
DA A
MOV 70H,A
MOV A,69H
ADDC A,#00H
CLRC
DA A
MOV 69H,A
MOVA,68H
ADDCA,#00H
CLRC
DAA
MOV68H,A
MOVA,67H
ADDCA
MOV67H,A
POP ACC
RETI
实习心得
通过本次单片机实习完全把握了MCS-51、8279的结构及作业原理,通过它们使我可以完结智能计数器,对智能计数器的作业原理也有了更深的领会和把握。学会了奇妙的编程办法,把握了定时器/计数器的使用。
就连我自己也不知道为什么,一开始我就对单片机很感兴趣。我觉得常常听万一堂课,我都有一种说不出的快乐,有时也会忧愁,因为课程越往后越难学而且讲课进展再加速,但我没有畏缩,每周坚持看单片机。就这样一步步走到课程规划,也许是没全身心投入,搞了两天程序才搞出来,成果上机时仍是存在着过错,和同组人刘欢评论和修改后才完结了“智能计数器”这个程序的编写。为了更好的完结软硬件的结合,我查阅了相关材料,终究得到了处理。 转眼间,一周的课程规划过去了。通过这么一个进程我愈加深入的认识了单片机。单片机是编程言语中非常重要的一种。它的功用非常强壮,而且使用广泛。我在编写这个程序时呈现了许多问题,一起也发现了要编好一个程序就要有一个好的程序规划根底。不只规划程序,便是任何事都是这样的。还有咱们干事要锲而不舍,知难而进,这样才干有所成果。因为专业的需求我还要持续学习单片机,而且我信任我也会在这方面作出成果,并把单片机灵敏使用在学习和作业中。