久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機的PCA模塊實現電子時鐘程序 通過UART把時間發送出來 [打印本頁]

作者: wanqz    時間: 2018-12-21 14:14
標題: 單片機的PCA模塊實現電子時鐘程序 通過UART把時間發送出來
實驗六 PCA實驗
一、實驗目的
1. 了解單片機的PCA的工作原理。
2. 掌握單片機的PCA的應用。
二、實驗內容

//1. 用單片機的PCA模塊實現一個簡單的電子時鐘。要求通過UART把時間發送出來,每秒更新一次并換行,時間格式為:hh:mm:ss。
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uchar;
typedef unsigned int  uint;

#include <stc15.h>
#include <intrins.h>


#define FOSC (11059200)
#define TMS(t) (t*FOSC/12000)
#define THZ(hz) (FOSC/24/hz)
//void SmgInit();
void PcaInit();
void UartInit(void);    //19200bps@11.0592MHz
void UartSend( u8 dat );

// uchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
// uchar wei=1;
u8 addr=0x00;
u8 rxdbuf[20];
u8 uart = 0;
u8 txd=0;
uint val0 = TMS(1000);
uint val1 = TMS(2);
uint val2 = THZ(100);

uchar s=55, m=59, h=23;
uint ms=0;
void main()
{
   
//  SmgInit();
  PcaInit();
  UartInit();    //19200bps@11.0592MHz
  UartSend(0x66);
    EA=1;
    while(1)
    {
        
        
    }
}

// void SmgInit()
// {
// P0M0 |= 0xF0;
// P0M1 &= 0x0F;
// P1M0 = 0xFF;
// P1M1 = 0x00;
// }

void PcaInit()
{
CMOD = 0x00;
CL = 0;
CH = 0;

CCAP0L = val0;
CCAP0H = val0>>8;
val0 = val0 + TMS(1000);
CCAPM0 = 0x49;

CCAP1L = val1;
CCAP1H = val1>>8;
val1 = val1 + TMS(2);
CCAPM1 = 0x49;

CCAP2L = val2;
CCAP2H = val2>>8;
val2 = val2 + THZ(100);
CCAPM2 = 0x4D;

CCON = 0x40;
}

void PcaSevr() interrupt 7
{
if( CCF0==1 )
{
     // UartSend(h%10+'0');
CCF0 = 0;
CCAP0L = val0;
CCAP0H = val0>>8;
val0 = val0 + TMS(1000);
   UartSend('h');
     UartSend('h');
   UartSend(':');
     UartSend(h/10%10);
     UartSend(h%10);

     UartSend('m');
     UartSend('m');
     UartSend(':');
     UartSend(m/10%10);
     UartSend(m%10);

     UartSend('s');
     UartSend('s');
     UartSend(':');
     UartSend(s/10%10);
   UartSend(s%10);
}

if( CCF1==1 )
{
CCF1 = 0;
CCAP1L = val1;
CCAP1H = val1>>8;
val1 = val1 + TMS(2);
ms++;
if( ms>=500 )
{
ms = 0;
s++;
if( s>=60 )
{
s = 0;
m++;
if( m>=60 )
{
m = 0;
h++;
if( h>=24 )
{
h = 0;
}
}
}
}

// switch( wei )
// {
// case 1:
// P07 = 1;
// P1 = tab[h/10%10];
// P04 = 0;
// wei = 2;
// break;
// case 2:
// P04 = 1;
// if( ms<10 )
// {
// P1 = tab[h%10] | 0x80;
// }
// else
// {
// P1 = tab[h%10];
// }
// P05 = 0;
// wei = 3;
// break;
// case 3:
// P05 = 1;
// P1 = tab[m/10%10];
// P06 = 0;
// wei = 4;
// break;
// case 4:
// P06 = 1;
// P1 = tab[m%10];
// P07 = 0;
// wei = 1;
// break;
// }



}

if( CCF2==1 )
{
CCF2 = 0;
CCAP2L = val2;
CCAP2H = val2>>8;
val2 = val2 + THZ(100);
}
}

///////////////////////////////////////////////////////////


void UartInit(void)    //19200bps@11.0592MHz
{
    SCON = 0x50;    //8位數據,可變波特率
    AUXR |= 0x01;    //串口1選擇定時器2為波特率發生器
    AUXR |= 0x04;    //定時器2時鐘為Fosc,即1T
    T2L = 0x70;        //設定定時初值
    T2H = 0xFF;        //設定定時初值
    ES = 1;         //打開串口1的中斷
    AUXR |= 0x10;    //啟動定時器2
}

void UartSend( u8 dat )
{
    while( txd==1 );
    SBUF = dat;
    txd = 1;
}

//串口自動下載命令:96 69 00 ff 02 fd 5a a5 ff
void Uart2Sevr() interrupt 4
{
    static u8 zt=0, bz=0;
    static u8 num=0, sum=0;
    u8 ch;
   
    if( RI )
    {
        RI = 0;
        ch = SBUF;
        switch( zt )
        {
            case 0://初始狀態
                if( ch==0x96 )
                {
                    zt = 1;
                }
            break;
            
            case 1://同步狀態
                if( ch==0x69 )
                {
                    zt = 2;
                }
                else
                {
                    zt = 0;
                }
            break;
            
            case 2://地址認證狀態
                if( bz==0 )
                {
                    if( ch==addr )
                    {
                        bz = 1;
                    }
                    else
                    {
                        zt = 0;
                    }
                }
                else
                {
                    if( ch==~addr )
                    {
                        zt = 3;
                    }
                    else
                    {
                        zt = 0;
                    }
                    bz = 0;
                }
            break;
            
            case 3://長度認證狀態
                if( bz==0 )
                {
                    rxdbuf[0] = ch;
                    bz = 1;
                }
                else
                {
                    if( ch==~rxdbuf[0] )
                    {
                        zt = 4;
                        num = 1;
                        sum = 0;
                    }
                    else
                    {
                        zt = 0;
                    }
                    bz = 0;
                }
            break;
            
            case 4://數據接收狀態
                rxdbuf[num++] = ch;
                sum = sum + ch;
                if( num>rxdbuf[0] )
                {
                    zt = 5;
                }
            break;
            
            case 5://數據累加和校驗狀態
                if( sum == ch )
                {
                    if( (rxdbuf[1]==0x5a)&&(rxdbuf[2]==0xa5) )
                    {
                        IAP_CONTR = 0x60;
                    }
                    uart = 1;
                }
                zt = 0;
            break;
        }
    }
   
    if( TI )
    {
        TI = 0;
        txd = 0;
    }
}






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品乱子伦一区二区三区 | 亚洲一区二区av | 青青青伊人 | 国产精品久久久久久久久久妇女 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 精品国产91 | 亚洲成av | 免费黄色大片 | 三级黄片毛片 | 国产精品久久久久久吹潮日韩动画 | 亚洲欧美中文字幕在线观看 | 美日韩一区二区 | 自拍视频在线观看 | 一区二区三区av夏目彩春 | 欧美综合久久 | 欧美黑人激情 | 日韩国产欧美在线观看 | 中文字幕电影在线观看 | 成人伊人| 色视频网站 | 国产高清精品在线 | 国产视频二区 | 精品91久久 | 欧美黄视频 | 国产欧美日韩在线 | 国产精品一区在线观看 | 99re在线视频观看 | 国产中文一区二区三区 | 国产91精品久久久久久久网曝门 | 四虎永久免费影院 | 伊人春色成人 | www成人免费 | 日本黄色免费视频 | 国产清纯白嫩初高生在线播放视频 | 99re在线视频观看 | 国产在线中文字幕 | 久久一区二区三区四区 | 国产欧美视频一区二区三区 | 久久亚洲视频 | 九九色综合 | 国产在线色 |