|
給你改了一下試試。
- #include "reg51.h"
- #include "intrins.h"
- typedef unsigned char uchar;
- typedef unsigned int WORD;
- /*Declare SFR associated with the ADC */
- sfr ADC_CONTR = 0xBC; //ADC control register
- sfr ADC_RES = 0xBD; //ADC high 8-bit result register
- sfr ADC_LOW2 = 0xBE; //ADC low 2-bit result register
- sfr P1ASF = 0x9D; //P1 secondary function control register
- /*Define ADC operation const for ADC_CONTR*/
- #define ADC_POWER 0x80 //ADC power control bit
- #define ADC_FLAG 0x10 //ADC complete flag
- #define ADC_START 0x08 //ADC start control bit
- #define ADC_SPEEDLL 0x00 //420 clocks
- #define ADC_SPEEDL 0x20 //280 clocks
- #define ADC_SPEEDH 0x40 //140 clocks
- #define ADC_SPEEDHH 0x60 //70 clocks
- /*----------------------------
- Software delay function
- ----------------------------*/
- void Delay(WORD n)
- {
- WORD x;
- while (n--)
- {
- x = 5000;
- while (x--);
- }
- }
- /*----------------------------
- Initial ADC sfr
- ----------------------------*/
- void InitADC()
- {
- P1ASF = 0xff; //Open 8 channels ADC function
- ADC_RES = 0; //Clear previous result
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
- Delay(2); //ADC power-on and delay
- }
- /*----------------------------
- Get ADC result
- ----------------------------*/
- void GetADCResult(uchar ch)
- {
- InitADC();
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
- _nop_(); //Must wait before inquiry
- _nop_();
- _nop_();
- _nop_();
- while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
- ADC_CONTR &= ~ADC_FLAG; //Close ADC
- }
- void ConfigTimer0(unsigned int ms) //T0 配置函數(shù)
- {
- unsigned long tmp;
- tmp = 11059200 / 12; //定時(shí)器技術(shù)頻率
- tmp = (tmp * ms) / 1000; //計(jì)算所需的計(jì)數(shù)值
- tmp = 65536 - tmp; //計(jì)算定時(shí)器重載值
- tmp = tmp + 34; //修正終端相應(yīng)延時(shí)造成的誤差
- T0RH = (unsigned char)(tmp >> 8); //定時(shí)器重載值拆分為高低字節(jié)
- T0RL = (unsigned char)tmp;
- TMOD &= 0xF0; //清零 TO 的控制位
- TMOD |= 0x01; //配置 TO 為模式 1
- TH0 = T0RH; //加載 TO 重載值
- TL0 = T0RL;
- //39
- ET0 = 1; //使能 TO 中斷
- TR0 = 1; //啟動(dòng) TO
- }
- void main ()
- {
- EA = 1; //開總中斷
- ConfigTimer0(1); //配置 TO 定時(shí) 1ms
- ConfigUART(9600); //配置波特率為 9600
- while(1)
- {
- UartDriver();
- }
- //38
- }
- void InterruptTimer0() interrupt 1 //T0 中斷服務(wù)函數(shù)
- {
- TH0 = T0RH; //定時(shí)器重新加載重載值
- TL0 = T0RL;
- if (flagBuzzOn) //蜂鳴器鳴叫或失敗
- BUZZ = ~BUZZ;
- else
- BUZZ = 1;
- UartRxMonitor(1);
- }
- //錯(cuò)為1111.C(63): error C267: 'ConfigTimer0': requires ANSI-style prototype
復(fù)制代碼 |
|