打印

12F1822怎么不工作 求大神帮我看看 谢谢!!

[复制链接]
1210|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
13548366390|  楼主 | 2018-5-27 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<pic.h>
#define uchar unsigned char
#define uint  unsigned int
__CONFIG(0x09e4);             //选内部震荡          //1110 1101 1111 00
__CONFIG(0x18ff);                //0110 0011 1111 11
//装载1年定时值 2×365×24=17520(10进制)0X4470(16进制)小时,在EEPROM的0单元填写 “0x2238”
//装载1小时定值  填写 01H,00H
__EEPROM_DATA(0x38,0x22,0x00,0x00,0x00,0x00,0x00,0x00);                  //初始化EEPROM的8个字节
void init();                   //初始化函数    声明
void delay(uint x);     //延时函数                 声明
//******************
//******************
unsigned uint SSD;       //闪烁灯
unsigned uchar sw1t;
unsigned uchar sw1th;
unsigned uchar DSL;      //一年定时低字节   
unsigned uchar DSH;      //一年定时高字节
unsigned uchar A_L;      //EEPROM低字节  数据变量 声明
unsigned uchar A_H;       //EEPROM高字节  数据变量 声明
unsigned uint AA;       //EEPROM高字节  数据变量 声明
///////////////////////////定义1位的变量  
bit MIN_F;   
bit fsw0A;
bit fsw1;
///////////////////////////////
void main()
{               
        while(1)  
        {
                A_L=EEPROM_READ(0);      //读EEPROM单元0的00字节内容,赋于A_L     
                A_H=EEPROM_READ(1);      //读EEPROM单元0的01字节内容,赋于A_H
                AA=(A_H<<8)+A_L;         //EEPROM高低字节,组装成双字节变量   
                if(AA==0)                     //从左到右赋值
                {
                        while(1)
                        {
                                CLRWDT();  
                                RA2=0;
                        }
                }
                if(MIN_F==1)                  //一小时定时标志位  
                {
                        MIN_F=0;                  //清一小时标志位
                        A_L=EEPROM_READ(0);      //读EEPROM单元0的00字节内容,赋于A_L
                        if(A_L==0)               //PIC16F877A有256个字节的EEPROM
                        {                                             //有32个单元
                                A_H=EEPROM_READ(1);  //读EEPROM单元0的01字节内容,赋于A_H
                                if(A_H==0)           //每个单元有8个字节(00,01,02,03,04,05,06,07)
                                {
                                        RA2=0;
                                }
                                else
                                {
                                        A_H--;
                                        EEPROM_WRITE(1,A_H);          //A_H减一后写入EEPROM的0单元的01字节
                                        while(EECON1bits.WR);         //while语句检查是否写完,写完后自动退出
                                }
                        }
                        else
                        {
                                A_L--;
                                EEPROM_WRITE(0,A_L);     //A_L减一后写入EEPROM,0单元的00字节  
                                while(EECON1bits.WR);         //while语句检查是否写完,写完后自动退出
                        }
        //定时60分钟=60分钟*60秒+16*1000000uS/65536=55175.78125(十进制)D787(十六进制
                        //DS1=0x87;                //16f1939只有30分钟
                        //DS2=0xd7;
                        //fsw0A=1;
                }
        }
}
///////////////////////////////////  
///////////////////////////////////
void init()                        //初始化
{
        ANSELA=0;                 // |设为数字IO口
        TRISA=0x0;      //0000 1000
        PORTA=0x00;          //0000 0100
        OPTION_REG=0xc6; //1100 0110 分频比1:128 *分频器给TIMER0            
        EECON1=0x07;         //使能读写操作
        OSCCON=0x73;         //选择内部震荡8M  
        //OSCSTAT=0;
        //LATA=0;
        //ANSELA=0;
        //INTCON=0xe0;         //启动TMR0 1110 0000  
        MIN_F=0;
        fsw1=0;  
        //定时60分钟=60分钟*60秒+16*1000000uS/65536=55175.78125(十进制)D787(十六进制
        //DSL=0x98;                //16f1939只有30分钟
        //DSH=0x00;
        //fsw0A=1;
}
/////////////////////////
/////////////////////////
void interrupt com(void)                //中断接收函数  
{   
        T0IF=0;               //清TMR0中断标志位
////////////////////////////闪烁灯函数
        if(SSD==0)
        {
                SSD=0x20;
                RA4^=1;
                RA2^=1;
                RA1^=1;
                RA0^=1;
        }
        SSD--;
        //////////////////
        //////////////////
        //定时60分钟=60分钟*60秒+16*1000000uS/65536=55175.78125(十进制)D787(十六进制
        if(fsw0A==1)
        {
                DSL--;
                if(DSL==0)                   //定时60分钟
                {
                        DSH--;
                        if(DSH==0)
                        {
                                fsw0A=0;
                                MIN_F=1;
                        }       
                }
        }
}
///////////////////////////
///////////////////////////
void delay(uint x)       //延时函数
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=110;b>0;b--);
}
沙发
Cjy_JDxy| | 2018-5-29 14:42 | 只看该作者
不工作的现象是什么?应该怎么样?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝