久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STC單片機IO管腳毀壞動態自檢程序
[打印本頁]
作者:
51hei森林
時間:
2016-3-15 01:55
標題:
STC單片機IO管腳毀壞動態自檢程序
#include <REGX52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#pragma NOAREGS
//STC ISP_V2.0 PCB的晶振為18.432MHz
#define WdtTime_71_1mS 0x30 //71.1mS
#define WdtTime_141_2mS 0x31 //141.2mS
#define WdtTime_284_4mS 0x32 //284.4mS
#define WdtTime_568_8mS 0x33 //568.8mS
#define WdtTime_1_1377S 0x34 //1.1377S
#define WdtTime_2_755S 0x35 //2.755S
#define T2_5mS -1536*5//5ms 18.432MHz
/*------------------------------------------------
AT89S5X
--------------------------------------------------*/
sfr AUXR = 0x8e;
sfr WDTRST = 0xa6;
sfr16 TIMEER2 = 0xcc;
sfr16 RCAP = 0xca;
/*------------------------------------------------
STC89C5XRC
--------------------------------------------------*/
sfr WDT_CONTR = 0x0e1;
//全局變量定義
typedef struct Systemstruct{//系統數據結構
unsigned char TimeCount;
unsigned int RamTest;
unsigned char SioTxCount;
unsigned char SioTxSum;
unsigned char SioRxCount;
unsigned char SioTxBuff[32];
// unsigned char SioRxBuff[32];
}SystemData;
data SystemData SystemBuffers;//申請系統數據結構
void MainInit(void);//系統初始化
void SystemInit(void);//系統初始化
void SystemSetup(void);//系統設置
void SystemIoInit(void);//系統接口初始化
void TimeInit(void);//定時器定時參數設置
void UserSetup(void);//用戶運行環境設置
void ClrWdt(void);//喂狗
void IoPinTest(void);
unsigned char Port0Test(void);
unsigned char Port1Test(void);
unsigned char Port2Test(void);
unsigned char Port3Test(void);
void main(void)
{
MainInit();//系統初始化
while (1) {//主循環
IE |= 0xb2;//保證中斷可靠EA,ET2,ES,ET0
TCON |= 0x55;//保證定時器開
PCON |= SMOD_ + GF0_ + IDL_;//進入空閑狀態并喂軟件狗
_nop_();
_nop_();
}
}
void MainInit(void) using 0//系統初始化
{
ClrWdt();//清除看門狗計數器
SystemIoInit();//系統接口初始化
SystemInit();//系統上電初始化
SystemSetup();//系統運行環境設置
UserSetup();//用戶運行環境設置
}
void SystemInit(void) using 0//系統初始化
{
if (SystemBuffers.RamTest != 0x55aa) {//內存初始化
SystemBuffers.RamTest = 0x55aa;
}
else {
}
}
void SystemSetup(void) using 0//系統設置
{
TimeInit();
}
void SystemIoInit(void) using 0
{
IE = 0x00;//關閉中斷
P2 = 0xff;//P2口初始化
P0 = 0xff;//P0口初始化
P1 = 0xff;//P1口初始化
P3 = 0xff;//P3口初始化
}
void TimeInit() using 0
{
// TCON = 0x55;//啟動定時器
/*----------------------------------
定時器0定時參數設置
----------------------------------*/
TL0 = 0;
TH0 = 0;
TR0 = 1;//啟動定時器0
/*----------------------------------
定時器1定時參數設置
----------------------------------*/
TMOD = 0x20;
TH1 = 0xfb;//Fosc=18.432MHz th1=tl1=0xfb bps=9600
TL1 = TH1;
SCON = 0x58;
PCON = 0x80;//2*bps=9600*2=19200
TR1 = 1;//啟動定時器1
/*----------------------------------
定時器2定時參數設置
----------------------------------*/
TIMEER2 = T2_5mS;
RCAP = T2_5mS;
TR2 = 1;//啟動定時器2
}
void UserSetup(void) using 0//用戶運行環境設置
{
SystemBuffers.SioTxCount = 0;
}
void ClrWdt(void) using 0//喂狗
{
WDT_CONTR = WdtTime_1_1377S;//1.1377S喂狗
}
/*------------------------------------
P0端口測試
主要測試管腳接電源或地及相臨管腳的短路
注意:此函數必須配合P0口上拉電阻!!
-------------------------------------*/
unsigned char Port0Test(void)
{
unsigned char testval;
P0 = 0x55;//奇數管腳發低電平
_nop_();//延時
testval = P0 ^ 0x55;//比較發送及接收結果
P0 = 0xaa;//偶數管腳發低電平
_nop_();//延時
testval |= P0 ^ 0xaa;//比較發送及接收結果(2次的)
P0 = 0xff;//釋放P0口,防止外部接入電源
return testval;//測試成功返回0
}
/*------------------------------------
P1端口測試
主要測試管腳接電源或地及相臨管腳的短路
-------------------------------------*/
unsigned char Port1Test(void)
{
unsigned char testval;
P1 = 0x55;//奇數管腳發低電平
_nop_();//延時
testval = P1 ^ 0x55;//比較發送及接收結果
P1 = 0xaa;//偶數管腳發低電平
_nop_();//延時
testval |= P1 ^ 0xaa;//比較發送及接收結果(2次的)
P1 = 0xff;//釋放P1口,防止外部接入電源
return testval;//測試成功返回0
}
/*------------------------------------
P2端口測試
主要測試管腳接電源或地及相臨管腳的短路
-------------------------------------*/
unsigned char Port2Test(void)
{
unsigned char testval;
P2 = 0x55;//奇數管腳發低電平
_nop_();//延時
testval = P2 ^ 0x55;//比較發送及接收結果
P2 = 0xaa;//偶數管腳發低電平
_nop_();//延時
testval |= P1 ^ 0xaa;//比較發送及接收結果(2次的)
P2 = 0xff;//釋放P2口,防止外部接入電源
return testval;//測試成功返回0
}
/*------------------------------------
P3端口測試
主要測試管腳接電源或地及相臨管腳的短路
-------------------------------------*/
unsigned char Port3Test(void)
{
unsigned char testval;
P3 = 0x55;//奇數管腳發低電平
_nop_();//延時
testval = P3 ^ 0x55;//比較發送及接收結果
P3 = 0xaa;//偶數管腳發低電平
_nop_();//延時
testval |= P3 ^ 0xaa;//比較發送及接收結果(2次的)
P3 = 0xff;//釋放P1口,防止外部接入電源
return testval;//測試成功返回0
}
void IoPinTest(void)
{
unsigned char i, err = 0, pin = 0;
// if (pin = Port0Test()) err = 1;//如果P0口上拉可開放此行
if (pin = Port1Test()) err = 2;
if (pin = Port2Test()) err = 3;
if (pin = Port3Test()) err = 4;
if (err) {
if ((TI == 0) && (SystemBuffers.SioTxCount == 0)) {
for (i = 0; i < 8; i++) {
if (pin & 1) break;
pin >>= 1;
}
strcpy(SystemBuffers.SioTxBuff, "P0_0 is Bad。!\n");
SystemBuffers.SioTxBuff[1] += err - 1;
SystemBuffers.SioTxBuff[3] += pin;
SystemBuffers.SioTxCount = strlen(SystemBuffers.SioTxBuff);
SystemBuffers.SioTxSum = SystemBuffers.SioTxCount;
TI = 1;
}
}
}
/*------------------------------------
定時器T0中斷服務程序
------------------------------------*/
void t0proc() interrupt TF0_VECTOR using 1
{
}
/*------------------------------------
定時器T1中斷服務程序
------------------------------------*/
void t1proc() interrupt TF1_VECTOR using 1
{
}
/*------------------------------------
定時器T2中斷服務程序(5mS)
------------------------------------*/
void t2proc() interrupt TF2_VECTOR using 0
{
TF2 = 0;
if (PCON & GF0_) {//中斷是從主循環內跳入的才能喂狗
ClrWdt();//清除看門狗計數器
PCON &= ~GF0_;//清除標志
}
IoPinTest();
}
/*------------------------------------
串口中斷服務程序(錯誤報告)
------------------------------------*/
void sioproc() interrupt SIO_VECTOR using 1
{
//unsigned char i;
if (RI) {//接收中斷
RI = 0;
}
if (TI) {//發送中斷
TI = 0;
if (SystemBuffers.SioTxCount) {//允許串口發送數據
SBUF = SystemBuffers.SioTxBuff[SystemBuffers.SioTxSum - SystemBuffers.SioTxCount];//串口顯示
SystemBuffers.SioTxCount --;
}
}
}
/*------------------------------------
外部INT0中斷服務程序
------------------------------------*/
void int0proc() interrupt IE0_VECTOR using 0
{
}
/*------------------------------------
外部INT1中斷服務程序
------------------------------------*/
void int1proc() interrupt IE1_VECTOR using 0
{
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品成人免费一区二区在线播放
|
日韩亚洲视频
|
欧美一区二区三区,视频
|
瑟瑟免费视频
|
成人精品高清
|
亚洲欧洲在线观看视频
|
国产91中文
|
成人在线观看欧美
|
国产福利91精品一区二区三区
|
91精品久久久
|
久久成人免费
|
欧美精品一区二区在线观看
|
久久免费精品视频
|
亚洲国产网址
|
亚洲精品一区二区三区中文字幕
|
一级黄a视频
|
免费av一区二区三区
|
www.久久久久久久久久久
|
亚洲精品1
|
日本高清中文字幕
|
成人久久18免费网站麻豆
|
www日本高清
|
欧美精品在线观看
|
色综合99
|
欧美精品一区二区三区在线播放
|
中文字幕一区二区三区在线观看
|
色婷婷在线视频
|
在线婷婷
|
九色在线视频
|
伊人久操
|
中文字幕一区二区三区乱码在线
|
亚洲一区二区三区免费视频
|
丝袜美腿一区二区三区
|
国产日韩一区二区三区
|
国产高清精品在线
|
黄色一级大片在线免费看产
|
日韩伦理一区二区
|
国产中文在线观看
|
国产精品国产三级国产aⅴ入口
|
亚洲综合中文字幕在线观看
|
在线观看免费高清av
|