C8051F同時實現(xiàn)AD和串口收發(fā)的程序_第1頁
C8051F同時實現(xiàn)AD和串口收發(fā)的程序_第2頁
C8051F同時實現(xiàn)AD和串口收發(fā)的程序_第3頁
C8051F同時實現(xiàn)AD和串口收發(fā)的程序_第4頁
C8051F同時實現(xiàn)AD和串口收發(fā)的程序_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C8051F同時實現(xiàn)AD和串口收發(fā)的程序/-#include #include stdio.hsfr16 TMR3RL = 0x92; /定時器3重裝載寄存器sfr16 TMR3 = 0x94; /定時器3計數(shù)器sfr16 DP =0x82;sfr16 ADC0 =0xbe;sfr16 ADC0GT =0xc4;sfr16 ADCOLT =0xc6;sfr16 RCAP2 =0xca;sfr16 T2 =0xcc;sfr16 RCAP4 =0xe4;sfr16 T4 =0xf4;sfr16 DAC0 =0xd2;sfr16 DAC1 =0xd5;#define uchar unsigned c

2、har#define uint unsigned int/-/參數(shù)設(shè)置區(qū)/-#define BAUDRATE 9600 /波特率bps#define SYSCLK 11059200 /外部晶振,修改也要修改OSCXCN#define SMODVAL 0 /SMOD的值,修改請也修改PCONVAL#define PCONVAL 0x00 /PCON的值,=0x00時SMOD0=0; =0x80時SMOD0=1#define TXVAL (256-SYSCLK*(SMODVAL+1)/BAUDRATE/384) /定時器初值#define MAX_LEN 1/每次接收/發(fā)送字符串的長度#defin

3、e SAMPLERATE0 5000#define NUM_SAMPLES 1#define TURE 1#define FALSE 0/-/全局變量/-sbit LED = P16; /LED 1亮 0滅bit readFlag = 0; /讀標志uchar readCounts = 0; /已經(jīng)讀取的字符個數(shù),與MAX_LEN比較uchar idATa trdATaMAX_LEN; /要接收/發(fā)送的字符串xdATa unsigned samplesNUM_SAMPLES;bit ADC0_DONE;/-/子函數(shù)聲明/-void SYSCLK_Init(void); /系統(tǒng)時鐘初始化void

4、 PORT_Init(void); /端口初始化void UART0_Init(void); /串口UART0初始化void Send_Char(uchar ch); /發(fā)送單個字符void Send_String(uchar * str, uint len); /發(fā)送一個字符串void UART0_ISR(); /串口中斷服務(wù)程序,接收字符void Timer3_Init(uint counts); /定時器3初始化void Timer3_ISR(void); /定時器3中斷服務(wù)程序void ADC0_Init (void);/-/主函數(shù)/-void main(void)unsigned s

5、hort i;floAT temp,k;WDTCN = 0xde; /禁止看門狗 WDTCN = 0xad;P6&=0x02;here:i=0;SYSCLK_Init(); /時鐘初始化PORT_Init(); /端口初始化UART0_Init(); /串口初始化Timer3_Init(SYSCLK/12/10); /定時器初始化EA = 1; /開全局中斷ADC0_Init();AD0INT=0; AD0BUSY=1; while(AD0INT=0); temp=ADC0; k=(temp*2.4)/4096; printf(n); printf(voltage%f,k); printf(n

6、); i=0;while(1) if(readFlag) /已經(jīng)讀取 readFlag = 0; /清零 Send_String(trdATa,MAX_LEN); /發(fā)送字符串 i+;if(i=10000)goto here; /-/子函數(shù)具體實現(xiàn)/-/系統(tǒng)時鐘初始化void SYSCLK_Init(void)uint i;OSCXCN = 0x67; /采用外部晶振22.1184MHz,不分頻. 選型OSCXCN=0110,0111for(i=0;i1mswhile(!(OSCXCN&0x80); /查詢直到XTLVLD=1,晶振穩(wěn)定OSCICN = 0x88; /切換到外部振蕩器,允許時鐘

7、失效監(jiān)測器. OSCICN=1000,1000/端口初始化void PORT_Init(void)XBR0 = 0x04; /允許UART0,RX,TX連到2個端口引腳. XBR0=0000,0100XBR1 = 0x00;XBR2 = 0x40; /交*開關(guān)使能P0MDOUT |= 0x03; /P0.0為推拉方式輸出,即TX0,RX0所在的端口 0000,0011P1MDOUT |=0x40; /P1.6為推拉方式輸出,即LED所在的端口 0100,0000/串口初始化void UART0_Init(void) SCON0=0x50; TMOD=0x20; TH1=-(SYSCLK/BAU

8、DRATE/16); TR1=1; CKCON|=0x10; PCON|=0x80; TI0=1; TR0 = 1; ES0 =1; /UART0中斷開啟 ADC時候要屏蔽 TR1 = 1; /啟動定時器T1 /定時器初始化void Timer3_Init(uint counts)TMR3CN = 0x00; /禁止定時器T3,清TF3,采用SYSCLK/12為時基 TMR3RL = -counts; /初始化重裝載值TMR3 = 0xffff; /設(shè)置為立即重裝載EIE2 |= 0x01; /T3中斷開啟 TMR3CN |= 0x04; /啟動T3 /發(fā)送單個字符void Send_Char

9、(uchar ch)SBUF0 = ch; /送入緩沖區(qū)1while(TI0 = 0); /等待發(fā)送完畢TI0 = 0; /軟件清零/發(fā)送字符串,調(diào)用Send_Char() len字符串長度void Send_String(uchar * str,uint len)uint k = 0;do Send_Char(*(str + k);k+; while(k =MAX_LEN) readCounts = 0;readFlag = 1;trdATareadCounts = rxch; /存入數(shù)組,供發(fā)送readCounts+; /ADC0_Init/配置ADC0使用定時器3溢出作為轉(zhuǎn)換啟動信號,轉(zhuǎn)換信號結(jié)束時候產(chǎn)生中斷,使用左對齊輸出方式/允許ADC0,但保持ADC0轉(zhuǎn)換結(jié)束中斷為禁止狀態(tài)void ADC0_Init(void) ADC0CN=0x04; /定時器 3 溢出啟動 ADC0 轉(zhuǎn)換 REF0CN=0x07; /內(nèi)部偏壓發(fā)生器工作,內(nèi)部電壓基準緩沖器工作。內(nèi)部電壓基準提供從 VR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論