CC2530基礎實驗之繼電器實驗(雙聯)
阿新 • • 發佈:2019-01-03
/* 串列埠控制繼電器 傳送11/10 開啟/關閉繼電器1 傳送21/20 開啟/關閉繼電器2 繼電器在P2_0 和 P1_7(雙聯繼電器) */ #include <iocc2530.h> #define LED1 P1_0 #define LED2 P1_1 #define JD1 P2_0 #define JD2 P1_7 #define ON 1 #define OFF 0 int counter = 0; unsigned char dat; int i=0; void initGPIO() //初始化LED { P2DIR = 0x01; P2SEL =0x00; P1DIR |=0x80; // P1_7 P1DIR |= 0x1b; P1SEL |=0x00; JD1=0; JD2=0; P1=0; } void init_T1() //初始化定時器1 { CLKCONCMD &= ~0X40; while(CLKCONSTA & 0x40); CLKCONCMD &= ~0X47; } void init_UART0() { PERCFG=0X00; //外設控制暫存器 這裡使用串列埠0位置1 P0SEL=0X0C; //0_2 0_3設定特殊埠 U0CSR |=0X80;//0100 0000 0x80 串列埠通訊的語言這裡使用USART U0BAUD =216; U0GCR=10 ; //波特率 U0UCR |=0x80; //流控制禁止 U0CSR |=0x40; //允許接受資料 UTX0IF = 0; //接受標誌位 URX0IF = 0; //傳送標誌位 URX0IE=1; //使能中斷 EA=1; //中斷總開關 } void SendString(char *str) { while(1) { if(*str=='\0') break; U0DBUF = *str++; while(!UTX0IF); UTX0IF = 0; } } #pragma vector = URX0_VECTOR __interrupt void URX0_function() { URX0IF = 0; dat=U0DBUF; if(dat==0x11) { JD1=ON; LED1=ON; SendString("繼電器1開啟\r\n"); } if(dat==0x10) { JD1=OFF; LED1=OFF; SendString("繼電器1關閉\r\n"); } if(dat==0x21) { JD2=ON; LED2=ON; SendString("繼電器2開啟\r\n"); } if(dat==0x20) { JD2=OFF; LED2=OFF; SendString("繼電器2關閉\r\n"); } } void main() { initGPIO(); init_T1(); init_UART0(); SendString("串列埠開啟成功\r\n"); while(1); }