用C语言写一个看门狗程序测试

发布者:oplkjjj最新更新时间:2023-01-13 来源: zhihu关键字:C语言  复位 手机看文章 扫描二维码
随时随地手机看文章

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

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

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

#define MAIN_Fosc 22118400L //定义主时钟

#include "STC15Fxxxx.H"

#define DIS_DOT 0x20

#define DIS_BLACK 0x10

#define DIS_ 0x11

#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)) //Timer 0 中断频率, 1000次/秒

u8 code t_display[]={ //标准字库

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

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

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

0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,

0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码

sbit P_HC595_SER = P4^0; //pin 14 SER data input

sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock

sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock

u8 LED8[8]; //显示缓冲

u8 display_index; //显示位索引

u16 ms_cnt;

u8 tes_cnt; //测试用的计数变量

void delay_ms(u8 ms);

void DisplayScan(void);

void main(void)

{

u8 i;

P0M1 = 0; P0M0 = 0; //设置为准双向口

P1M1 = 0; P1M0 = 0; //设置为准双向口

P2M1 = 0; P2M0 = 0; //设置为准双向口

P3M1 = 0; P3M0 = 0; //设置为准双向口

P4M1 = 0; P4M0 = 0; //设置为准双向口

P5M1 = 0; P5M0 = 0; //设置为准双向口

P6M1 = 0; P6M0 = 0; //设置为准双向口

P7M1 = 0; P7M0 = 0; //设置为准双向口

display_index = 0;

for(i=0; i<8; i++) LED8[i] = DIS_BLACK; //全部消隐

tes_cnt = 0;

ms_cnt = 0;

LED8[7] = ms_cnt;

while(1)

{

delay_ms(1); //延时1ms

DisplayScan();

if(tes_cnt <= 5) //5秒后不喂狗, 将复位,

WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_16); // 喂狗

if(++ms_cnt >= 1000)

{

ms_cnt = 0;

tes_cnt++;

LED8[7] = tes_cnt;

}

}

}

void delay_ms(u8 ms)

{

u16 i;

do{

i = MAIN_Fosc / 13000;

while(--i) ; //14T per loop

}while(--ms);

}

void Send_595(u8 dat)

{

u8 i;

for(i=0; i<8; i++)

{

dat <<= 1;

P_HC595_SER = CY;

P_HC595_SRCLK = 1;

P_HC595_SRCLK = 0;

}

}

void DisplayScan(void)

{

Send_595(~T_COM[display_index]); //输出位码

Send_595(t_display[LED8[display_index]]); //输出段码

P_HC595_RCLK = 1;

P_HC595_RCLK = 0; //锁存输出数据

if(++display_index >= 8) display_index = 0; //8位结束回0

}


关键字:C语言  复位 引用地址:用C语言写一个看门狗程序测试

上一篇:用汇编语言做一个看门狗测试
下一篇:用汇编语言写一个LCD1602驱动显示程序

推荐阅读最新更新时间:2024-11-01 10:28

单片机C语言的补码解释及运算
补码(two's complement)   1、在计算机系统中,数值一律用补码来表示(存储)。   主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补   码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。   2、补码与原码的转换过程几乎是相同的。   求给定数值的补码表示分以下两种情况: (1)正数的补码   与原码相同。   【例1】+9的补码是00001001。 (2)负数的补码   符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。   【例2】求-7的补码。   因为给定数是负数,则符号位为“1”。   后七位:+7的原码(0000
[单片机]
基于51单片机的MODBUS通信C语言程序(从机)
#include reg52.h typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; #define TIMER_HIGHT 0xf8 #define TIMER_LOW 0xcd sbit bRunLED =P3^4; //运行指示灯 sbit bWatchDog =P1^7; //看门狗复位 sbit b485Send= P1^3; //75LBC184 发送接收控制 uint32 dwTickCount,dwIntTick; //时钟 uint8 i
[单片机]
51单片机之C语言-4.3结构体
既然既然相同长度单元格能放在一起,比如char1,char2,char3; int1,int2,int3; long1,long2,long3.在实际使用中,有些变量长度是不一样的,但由于它们之间相互关联也需要放在一起,那么要是不同长度的变量,想放在一起有没有办法呢?当然可以,这个就叫做结构体。现在按照数组的学习方法来研究结构体,两个问题,如何定义;如何访问结构体成员。 (1) 如何定义一个结构体 定义一个结构的一般形式为: struct 结构名 {成员表列}; 成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符成员名; 成员名的命名应符合标志符的书写规定。例如
[单片机]
ATmega8 外部复位
外部复位由外加于RESET 引脚的低电平产生。当复位低电平持续时间大于最小脉冲宽度 时( 参见Table 15) 即触发复位过程,即使此时并没有时钟信号在运行。当外加信号达到 复位门限电压VRST( 上升沿) 时, tTOUT 延时周期开始。延时结束后MCU 即启动。
[单片机]
ATmega8 外部<font color='red'>复位</font>
C语言一百例第五例
代码: /* C语言第五例 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x y则将x与y的值进行交换 然后再用x与z进行比较,如果x z则将x与z的值进行交换,这样能使x最小。 第一个数和第二个数比较,最小的放最前面,第一个和第三个比较,小的放最前面,第二个和第三个比较,小的放中间,由此可得到从小到大排序。 */ #include stdio.h void main(void) { int a,b,c,d; printf( 请输入三个整数:n ); scanf( %d,%d,%d ,&a,&b,&c); if(a b)
[单片机]
<font color='red'>C语言</font>一百例第五例
51单片机C语言程序(五) 时钟程序(用定时器)
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit rs=P3^5; sbit lcden=P3^4; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit rd=P3^7; uchar count,s1num; char miao,shi,fen; uchar code table = 2009-7-13 MON ; uchar code table1 = 00:00:00 ; void delay(uint z) {
[单片机]
单片机C语言程序设计:K1-K4 控制 LED 移位
/* 名称:K1-K4 控制 LED 移位 说明:按下 K1 时,P0 口 LED 上移一位; #FormatImgID_0# */ 按下 K2 时,P0 口 LED 下移一位; 按下 K3 时,P2 口 LED 上移一位; 按下 K4 时,P2 口 LED 下移一位; #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) for(i=0;i 120;i++);
[单片机]
单片机<font color='red'>C语言</font><font color='red'>程序</font>设计:K1-K4 控制 LED 移位
STM32再学习——启动流程分析
我们写嵌入式程序,基本上采用C语言来编写,以main()作为程序的入口。但实际上,mian()并不是最先要执行的,在这之前需要做一些基本的工作,如堆、栈的定义;main函数的复位连接等,这些工作就需要一个专门的启动程序来完成,由于需要做的工作内容不多,并且需要更直接的管理内存,一般采用汇编编写。 本文引用地址:http://www.eepw.com.cn/article/236700.htm 无论是STM32、ARM系列的单片机,还是简单的如51,PIC等,都以为上述原因,需要启动程序,只不过51,PIC等单片机的启动程序已经在相应的IDE编译、链接的时候隐含的编译了,故在写单片机程序的时候无需考虑。而STM32的启动有相
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved