如何分析单片机C语言程序设计10秒的秒表的程序

如何分析单片机C语言程序设计10秒的秒表的程序,第1张

要分析一个单片机 C 语言程序设计的秒表程序,需要考虑以下几个方面:

硬件平台:需要了解秒表程序所运行的单片机类型,以及硬件平台上可用的硬件资源,如定时器、显示器等。

时间计数方式:需要确定秒表程序使用的时间计数方式,是通过定时器实现周期性计时,还是通过程序每隔一段时间手动计时。

显示方式:需要确定秒表程序的显示方式,是通过数码管显示时间,还是通过 LCD 显示屏显示时间。

程序流程:需要分析秒表程序的主要流程,包括初始化、计时、显示等步骤。

程序细节:需要关注秒表程序中的细节,如处理溢出、计时格式

S_SEG SEGMENT STACK

DB 256 DUP()

S_SEG ENDS

D_SEG SEGMENT

COUNT DB 0 ;计时单元,初值为0

TENM DB ‘ 0’ ;10分计时单元,初值为0

MINUTE DB ‘0:’ ;分计时单元,初值为0

TENS DB ‘0’ ;10秒计时单元,初值为0

SECOND DB ‘0’ ;秒计时单元,初值为0

HAOM DB ‘0’ ;10毫秒计时单元,初值为0

HAO DB ’8’,’$’ ;毫秒计时单元,初值为8

D_SEG ENDS

C_SEG SEGMENT

ASSUME CS:C_SEG ,SS:S_SEG

START: MOV AX,D_SEG

MOV DS,AX

CLI ;先关中断,以获得INT1CH

MOV AX,351CH ;调用35H号系统功能

INT 21H ;返回ES:BX=中断向量(段:偏移)

PUSH BX ;栈中保存INT1CH原中断向量

PUSH ES

STI ;开中断,以使键盘工作

MOV AH,1 ;等待键按下

INT 16H

CLI ;关中断

MOV DX,SEG TIMER ;置新中断向量

MOV DS,DX

MOV DX,OFFSET TIMER ;DS:DX=新中断向量(段:偏移)

MOV AX,251CH

INT 21H

STI ;再开中断,以使键盘和INT1CH工作

CHECK: MOV AH ,1 ;检查有无键代码

INT 16H

JZ DISPLAY1 ;无码可读,就跳转显示(DISPLAY系统保留)]

MOV AH ,0 ;无码可读,就要读取它

INT 16H

CMP AL ,51H ;是’Q’吗

JE OVER ;是,返回DOS

DISPLAY1: MOV AX,D_SEG ;不是,就显示

MOV DS ,AX

ASSUME DS:D_SEG

LEA DX ,TENM ;DS:DX=显示字符串地址

MOV AH ,9 ;显示 mm :ssmsms

INT 21H

JMP CHECK ;返回CHECK,循环继续

OVER: CLI

POP DS ;由栈中取回INT1CH原向量

POP DX

MOV AX ,251CH ;设置INT1CH,恢复原向量

INT 21H

STI ;开中断

MOV AX ,4C00H ;返回DOS

INT 21H

;以下为使用INT 1CH的中断服务子程序

TIMER PROC FAR

PUSH AX

MOV AX , D_SEG

MOV DS , AX

ASSUME DS :D_SEG

INC COUNT ;计时单元增1

CMP COUNT , ‘2’ ;到110毫秒否

JL EXIT ;不到,则返回

MOV COUNT , ‘0’ ;到,则计时单元清0

INC HAOM ;10毫秒计时单元增1

CMP HAOM ,’9’ ;到1秒否

JLE EXIT ;不到,则返回

INC SECOND ;到,则秒计时单元增1

MOV HAOM , ‘0’ ;10毫秒计时单元清0

CMP SECOND ,‘9’ ;到10秒否

JLE EXIT ;不到,则返回

MOV SECOND ,‘0’ ;到,则秒计时单元清0

INC TENS ;10秒计时单元增1

CMP TENS ,‘6’ ;到60秒否

JL EXIT ;不到,则返回

MOV TENS ,‘0’ ;到 ,则10秒计时单元清0

INC MINUTE ;分计时单元清0

CMP MINUTE ,‘9’ ;到10分 否

JLE EXIT ;不到,则返回

MOV MINUTE ,‘0’ ;到,则分计时单元清0

INC TENM ;10分计时单元增1

CMP TENM ,‘6’ ;到60分否

JL EXIT ;不到,则返回

MOV TENM ,‘0’ ;到,则10分计时单元清0,重新开始计时

EXIT: POP AX

IRET

TIMER ENDP

C_SEG ENDS

END START

CLK: CLK为时钟信号;

CLR: 为异步复位信号;

PAUSE: 为暂停信号;

MSH,MSL: 百分秒的高位和低位;

SH,SL: 秒信号的高位和低位;

MH,ML: 分钟信号的高位和低位。 /

module paobiao(CLK,CLR,PAUSE,MSH,MSL,SH,SL,MH,ML);

input CLK,CLR;

input PAUSE;

output[3:0] MSH,MSL,SH,SL,MH,ML;

reg[3:0] MSH,MSL,SH,SL,MH,ML;

reg cn1,cn2; //cn1为百分秒向秒的进位,cn2为秒向分的进位

//百分秒计数进程,每计满100,cn1产生一个进位

always @(posedge CLK or posedge CLR)

begin

if(CLR) begin //异步复位

{MSH,MSL}<=8'h00;

cn1<=0;

end

else if(!PAUSE) //PAUSE为0时正常计数,为1时暂停计数

begin

if(MSL==9) begin

MSL<=0;

if(MSH==9)

begin MSH<=0; cn1<=1; end

else MSH<=MSH+1;

end

else begin

MSL<=MSL+1; cn1<=0;

end

end

end

//秒计数进程,每计满60,cn2产生一个进位

always @(posedge cn1 or posedge CLR)

begin

if(CLR) begin //异步复位

{SH,SL}<=8'h00;

cn2<=0;

end

else if(SL==9) //低位是否为9

begin

SL<=0;

if(SH==5) begin SH<=0; cn2<=1; end

else SH<=SH+1;

end

else

begin SL<=SL+1; cn2<=0; end

end

//分钟计数进程,每计满60,系统自动清零

always @(posedge cn2 or posedge CLR)

begin

if(CLR)

begin {MH,ML}<=8'h00; end //异步复位

else if(ML==9) begin

ML<=0;

if(MH==5) MH<=0;

else MH<=MH+1;

end

else ML<=ML+1;

end

endmodule

给一个数字跑表的程序给你参考,你可以加到你的程序去

以上就是关于如何分析单片机C语言程序设计10秒的秒表的程序全部的内容,包括:如何分析单片机C语言程序设计10秒的秒表的程序、汇编语言编写一个简单的电子秒表、哪位大大帮我看下这段Verilog代码哪里有问题啊~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10625978.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存