用汇编语言做一个看门狗测试

发布时间:2023-01-13  

用STC的MCU的IO方式控制74HC595驱动8位数码管。

; 用户可以修改宏来选择时钟频率.

; 显示效果为: 显示秒计数, 5秒后不喂狗, 等复位.

Fosc_KHZ EQU 22118 ;22118KHZ

STACK_POIRTER EQU 0D0H ; 堆栈开始地址

DIS_DOT EQU 020H

DIS_BLACK EQU 010H

DIS_ EQU 011H

AUXR DATA 08EH

P4 DATA 0C0H

P5 DATA 0C8H

P0M1 DATA 0x93 ;

P0M0 DATA 0x94 ;

P1M1 DATA 0x91 ;

P1M0 DATA 0x92 ;

P2M1 DATA 0x95 ;

P2M0 DATA 0x96 ;

P3M1 DATA 0xB1 ;

P3M0 DATA 0xB2 ;

P4M1 DATA 0xB3 ;

P4M0 DATA 0xB4 ;

P5M1 DATA 0xC9 ;

P5M0 DATA 0xCA ;

P6M1 DATA 0xCB ;

P6M0 DATA 0xCC ;

P7M1 DATA 0xE1 ;

P7M0 DATA 0xE2 ;

WDT_CONTR DATA 0xC1

D_WDT_FLAG EQU (1 SHL 7)

D_EN_WDT EQU (1 SHL 5)

D_CLR_WDT EQU (1 SHL 4) ;auto clear

D_IDLE_WDT EQU (1 SHL 3) ;WDT counter when Idle

D_WDT_SCALE_2 EQU 0

D_WDT_SCALE_4 EQU 1

D_WDT_SCALE_8 EQU 2 ;T=393216*N/fo

D_WDT_SCALE_16 EQU 3

D_WDT_SCALE_32 EQU 4

D_WDT_SCALE_64 EQU 5

D_WDT_SCALE_128 EQU 6

D_WDT_SCALE_256 EQU 7

P_HC595_SER BIT P4.0 ; //pin 14 SER data input

P_HC595_RCLK BIT P5.4 ; //pin 12 RCLk store (latch) clock

P_HC595_SRCLK BIT P4.3 ; //pin 11 SRCLK Shift data clock

LED8 DATA 30H ; 显示缓冲 30H ~ 37H

display_index DATA 38H ; 显示位索引

ms_cnt_H DATA 39H ; 1000ms 计数值

ms_cnt_L DATA 3AH ;

tes_cnt DATA 3BH ; 测试用的计数变量

ORG 0000H ;reset

LJMP F_Main

ORG 0100H ;reset

F_Main:

CLR A

MOV P0M1, A ;设置为准双向口

MOV P0M0, A

MOV P1M1, A ;设置为准双向口

MOV P1M0, A

MOV P2M1, A ;设置为准双向口

MOV P2M0, A

MOV P3M1, A ;设置为准双向口

MOV P3M0, A

MOV P4M1, A ;设置为准双向口

MOV P4M0, A

MOV P5M1, A ;设置为准双向口

MOV P5M0, A

MOV P6M1, A ;设置为准双向口

MOV P6M0, A

MOV P7M1, A ;设置为准双向口

MOV P7M0, A

MOV SP, #STACK_POIRTER

MOV PSW, #0

USING 0 ;选择第0组R0~R7

MOV display_index, #0

MOV R0, #LED8

MOV R2, #8

L_ClearLoop:

MOV @R0, #DIS_BLACK ;上电消隐

INC R0

DJNZ R2, L_ClearLoop

MOV ms_cnt_H, #HIGH 1000 ; 重装1000ms计数值

MOV ms_cnt_L, #LOW 1000

MOV tes_cnt, #0

MOV LED8+7, tes_cnt

L_MainLoop:

MOV A, #1 ;延时1ms

LCALL F_delay_ms

LCALL F_DisplayScan

MOV A, tes_cnt

CLR C

SUBB A, #6 ; if(tes_cnt <= 5) //5秒后不喂狗, 将复位,

JNC L_QuitWatchDog

MOV WDT_CONTR, #(D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_16) ; 喂狗

L_QuitWatchDog:

MOV A, ms_cnt_L ; if(--ms_cnt == 0)

CLR C

SUBB A, #1

MOV ms_cnt_L, A

MOV A, ms_cnt_H

SUBB A, #0

MOV ms_cnt_H, A

ORL A, ms_cnt_L

JNZ L_cnt1000_NotZero

MOV ms_cnt_H, #HIGH 1000 ; 重装1000ms计数值

MOV ms_cnt_L, #LOW 1000

INC tes_cnt ; 测试计数+1

MOV LED8+7, tes_cnt ;

L_cnt1000_NotZero:

LJMP L_MainLoop

F_delay_ms:

PUSH 02H ;入栈R2

PUSH 03H ;入栈R3

PUSH 04H ;入栈R4

MOV R2,A

L_delay_ms_1:

MOV R3, #HIGH (Fosc_KHZ / 13)

MOV R4, #LOW (Fosc_KHZ / 13)

L_delay_ms_2:

MOV A, R4 ;1T Total 13T/loop

DEC R4 ;2T

JNZ L_delay_ms_3 ;4T

DEC R3

L_delay_ms_3:

DEC A ;1T

ORL A, R3 ;1T

JNZ L_delay_ms_2 ;4T

DJNZ R2, L_delay_ms_1

POP 04H ;出栈R2

POP 03H ;出栈R3

POP 02H ;出栈R4

RET

T_Display: ;标准字库

; 0 1 2 3 4 5 6 7 8 9 A B C D E F

DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071H

; black - H J K L N o P U t G Q r M y

DB 000H,040H,076H,01EH,070H,038H,037H,05CH,073H,03EH,078H,03dH,067H,050H,037H,06EH

; 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

DB 0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H,0FFH,0EFH,046H

T_COM:

DB 001H,002H,004H,008H,010H,020H,040H,080H ; 位码

F_Send_595:

PUSH 02H ;R2入栈

MOV R2, #8

L_Send_595_Loop:

RLC A

MOV P_HC595_SER,C

SETB P_HC595_SRCLK

CLR P_HC595_SRCLK

DJNZ R2, L_Send_595_Loop

POP 02H ;R2出栈

RET

F_DisplayScan:

PUSH DPH ;DPH入栈

PUSH DPL ;DPL入栈

PUSH 00H ;R0 入栈

MOV DPTR, #T_COM

MOV A, display_index

MOVC A, @A+DPTR

CPL A

LCALL F_Send_595 ;输出位码

MOV DPTR, #T_Display

MOV A, display_index

ADD A, #LED8

MOV R0, A

MOV A, @R0

MOVC A, @A+DPTR

LCALL F_Send_595 ;输出段码

SETB P_HC595_RCLK

CLR P_HC595_RCLK ; 锁存输出数据

INC display_index

MOV A, display_index

ANL A, #0F8H ; if(display_index >= 8)

JZ L_QuitDisplayScan

MOV display_index, #0; ;8位结束回0

L_QuitDisplayScan:

POP 00H ;R0 出栈

POP DPL ;DPL出栈

POP DPH ;DPH出栈

RET

END


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    器(简称C51)。由C51产生的目标代码短、运行速度高、存储空间小、符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用。 3、C是一门高级语言......
    ,使用C语言开发PIC单片机程序有许多优点: 1 相较于汇编语言来说,使用C语言这类高级编程语言进行编程比较简单方便。使用汇编语言编程需要掌握一定的CPU运行知识,而且对寄存器、运算......
    让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。   编程语言俗称“计算机语言”,种类非常的多,总的来说可以分成机器语言汇编语言、高级语言三大类。电脑每做的一次动作,一个......
    。通常在子程序入口或转移指令的目标地址处才赋予标号。有了标号,程序中的其它语句才能访问该语句。MCS-51汇编语言有关标号的规定如下: 1).标号是由1~8个ASCII字符组成,但头......
    的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支......
    是说,汇编语言程序的通用性和可移植性要比高级语言程序低。 正因为汇编语言有 “与机器相关性 ”的特性, 程序员用汇编语言编写程序时, 可充分对机器内部的各种资源进行合理的安排, 让它......
    五种支持plc编程的语言有哪些;PLC的软件编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同于一般的汇编语言,且要满足易于编写和调试的要求。 早期的PLC仅支持梯形图编程语言和指令表编程语言......
    汇编和C语言相结合的51单片机编程技巧;  本文主要是关于汇编和C语言的相关介绍,并着重对汇编和C语言的不同及其编程技巧进行了详尽的阐述。   汇编和C语言   C语言和汇编语言......
    跑马灯实验用汇编语言和C51语言做出的不同效果;当前开发单片机应用系统程序主要应用汇编语言和C51语言,采用汇编语言编写可直接操纵系统的硬件资源,能编写出高效运行的程序代码,程序运行速度快。而采......
    GCC中的内嵌汇编语言;一.声明   虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇编语言写成的。有些汇编语言代码是直接写在汇编源程序中的,特别是Linux的启......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>