嵌入式成长轨迹53 【Zigbee项目】【CC2430基础实验】【串口时钟PC显示】
生活随笔
收集整理的這篇文章主要介紹了
嵌入式成长轨迹53 【Zigbee项目】【CC2430基础实验】【串口时钟PC显示】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
void InitT1(void) ;
函數原型:
?
函數功能:開T1中斷,T1為比較計數模式。因 T1計數時鐘為 0.25M (見 void InitClock(void)說明),T1CC0 = 0X03E8? = 1000,因此 250 次中斷溢出為 1s 。
?
void InitClock(void);
函數原型:
?
函數功能:設置系統時鐘為晶振,同時將計數器時鐘設為0.25M 。晶振振蕩穩定后退出函數。
?
void InitUART0(void) ;
函數原型:
?
函數功能:串口0 映射位置 1,UART 方式,波特率57600,允許接收,開接收中斷。
?
void T1_ISR(void) ;
函數原型:
?
函數功能:T1中斷服務程序,每 250 次中斷將timetemp 置1,表示 1 秒時間到,同時改變 LED的狀態。
?
void UART0_ISR(void) ;
函數原型:
函數功能:從串口0 接收用于設置時間的字符。
?
1 //clock.c 2 /************************** 3 T1用比較模式 4 **************************/ 5 6 #include <ioCC2430.h> 7 8 /************************** 9 計數時鐘 0.25M 10 **************************/ 11 void InitClock(void) 12 { 13 CLKCON = 0X38; 14 //TICKSPD = 111 定時器計數時鐘源 15 while(!(SLEEP&0X40)); 16 //等晶振穩定 17 } 1 //timer.c 2 3 #include "ioCC2430.h" 4 5 /**************************** 6 T1初始化 7 ****************************/ 8 void InitT1(void) 9 { 10 T1CCTL0 = 0X44; 11 //T1CCTL0 (0xE5) 12 //T1 ch0 中斷使能 13 //比較模式 14 15 T1CC0H = 0x03; 16 T1CC0L = 0xe8; 17 //0x03e8 = 1000D) 18 19 T1CTL |= 0X02; 20 //start count 21 //在這里沒有分頻。 22 //使用比較模式 MODE = 10(B) 23 24 IEN1 |= 0X02; 25 IEN0 |= 0X80; 26 //開T1中斷 27 } 1 //uart.c 2 //初始化UART0 3 4 # include "ioCC2430.h" 5 6 /***************************************** 7 *函數功能 :初始化串口 8 *入口參數 : 無 9 *返 回 值 :無 10 *說 明 :57600-n-8-0 11 *****************************************/ 12 void InitUART0(void) 13 { 14 PERCFG = 0x00; //位置1 P0口 15 P0SEL = 0x3c; //P0用作串口 16 17 U0CSR |= 0x80; //UART方式 18 U0GCR |= 10; //baud_e 19 U0BAUD |= 216; //波特率設為57600 20 UTX0IF = 1; 21 22 U0CSR |= 0X40; //允許接收 23 IEN0 |= 0x84; //開總中斷,接收中斷 24 } 25 26 /**************************************************************** 27 *函數功能 :串口發送字符串函數 28 *入口參數 : data:數據 29 * len :數據長度 30 *返 回 值 :無 31 *說 明 : 32 ****************************************************************/ 33 void UartTX_Send_String(char *Data,int len) 34 { 35 int j; 36 for(j=0;j<len;j++) 37 { 38 U0DBUF = *Data++; 39 while(UTX0IF == 0); 40 UTX0IF = 0; 41 } 42 } 1 //main.c 2 /***************************************** 3 //設置時間格式:#+00+00+00 4 *****************************************/ 5 #include "ioCC2430.h" 6 7 8 #define led1 P1_0 9 #define gled P1_1 10 11 char time[3]={23,59,55}; //時間初值 12 char Recdata[9]; //串口接收到的數據 13 char SendData[10]="00:00:00 "; //時間數據包 14 char timetemp; //鈔針 15 char counter = 0; //中斷計數 16 char temp; //用于讀串口接收到的數 17 char number = 0; // 18 char follow_second; //時間跟隨 19 20 extern void UartTX_Send_String(char *data,int len); 21 extern void InitClock(void); 22 extern void InitT1(void); 23 extern void InitUART0(void); 24 25 /***************************************** 26 *函數功能 : 27 *入口參數 : 28 *返 回 值 : 29 *說 明 : 30 *****************************************/ 31 void InitIO(void) 32 { 33 P1DIR |= 0X03; 34 P1_1 = 1; 35 P1_0 = 1; 36 } 37 38 /**************************************************************** 39 *函數功能 :T1中斷函數 40 *入口參數 : 無 41 *返 回 值 :無 42 *說 明 : 43 ****************************************************************/ 44 #pragma vector = T1_VECTOR 45 __interrupt void T1_ISR(void) 46 { 47 IRCON &= ~0x02;//清中斷標志 48 counter++; 49 if(counter == 250) 50 { 51 counter = 0; 52 timetemp = 1; //一秒到 53 led1 = ~led1; // 調試指示用 54 } 55 } 56 57 /**************************************************************** 58 *函數功能 :串口接收一個字符 59 *入口參數 : 無 60 *返 回 值 :無 61 *說 明 :接收完成后打開接收 62 ****************************************************************/ 63 #pragma vector = URX0_VECTOR 64 __interrupt void UART0_ISR(void) 65 { 66 URX0IF = 0; //清中斷標志 67 temp = U0DBUF; 68 } 69 /***************************************** 70 主函數 71 *****************************************/ 72 void main(void) 73 { 74 InitClock(); 75 InitT1(); 76 InitUART0(); 77 InitIO(); 78 UartTX_Send_String(SendData,8); 79 do{ 80 if(timetemp == 1) //if0 81 { 82 if(time[2]<59) //second //if1 83 { 84 time[2]++; 85 } 86 else 87 { 88 time[2] = 0; 89 if(time[1]<59) //minute //if2 90 { 91 time[1]++; 92 } 93 else 94 { 95 time[1] = 0; 96 if(time[0]<23) //hour //if3 97 { 98 time[0]++; 99 } 100 else 101 { 102 time[0] = 0; 103 } //end if3 104 } //end if2 105 } //end if1 106 timetemp = 0; 107 }//end if0 108 109 if(temp != 0) 110 { 111 Recdata[number++]=temp; 112 temp = 0; 113 } 114 /********上程序段用來計時,最小精度為秒*********************/ 115 if((Recdata[0] == '#')&&(number == 9)) //F0 為設時間的數據段首字節 116 { 117 time[2] = (Recdata[7]-48)*10+(Recdata[8]-48);; 118 if(time[2]>59)time[2]=0; 119 120 time[1] = (Recdata[4]-48)*10+(Recdata[5]-48); 121 if(time[1]>59)time[1]=0; 122 123 time[0] = (Recdata[1]-48)*10+(Recdata[2]-48); 124 if(time[0]>23)time[0]=0; 125 126 gled = !gled; //for test 127 Recdata[0] = 0; 128 number = 0; 129 } 130 131 /************************以上程序段用來處理PC命令***************************/ 132 133 if(follow_second != time[2]) 134 { 135 SendData[7] = (char)(time[2])%10+48; 136 SendData[6] = (char)(time[2])/10+48; 137 SendData[4] = (char)(time[1])%10+48; 138 SendData[3] = (char)(time[1])/10+48; 139 SendData[1] = (char)(time[0])%10+48; 140 SendData[0] = (char)(time[0])/10+48; 141 /**************************以上程序將時間數據打包****************************/ 142 UartTX_Send_String(SendData,10); 143 follow_second = time[2]; 144 }//end if 145 }while(1);//end 146 }//end main()?
轉載于:https://www.cnblogs.com/zeedmood/archive/2012/09/01/2666938.html
總結
以上是生活随笔為你收集整理的嵌入式成长轨迹53 【Zigbee项目】【CC2430基础实验】【串口时钟PC显示】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Automatic IE Testing
- 下一篇: Android获取存储卡路径的方式(转)