熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2024-1-11 06:50
正文摘要:#include "STC8G.h" #define uint unsigned int #define uchar unsigned char #define FOSC 1105920L //系統(tǒng)頻率 #define BAUD 11520 //串口波特率 uint ADC1_DATA; uchar ADC1_H; uchar ADC1_L; void ... |
wulin 發(fā)表于 2024-1-13 06:11 把定時(shí)器2修改為定時(shí)器1后,可以發(fā)送數(shù)據(jù)了,謝謝 |
hjx5548 發(fā)表于 2024-1-12 20:14 首先要說(shuō)清楚所選用的MCU具體型號(hào),你標(biāo)題寫(xiě)STC8G1K0A,在15、16樓又說(shuō)是STC8G1H08A。實(shí)際上你說(shuō)的型號(hào)都不存在。估猜實(shí)際型號(hào)是STC8G1K08A-PIN8。那么問(wèn)題就非常明確了。STC8G1K08A只有定時(shí)器0和定時(shí)器1,沒(méi)有定時(shí)器2。你用定時(shí)器2作波特率發(fā)生器怎么能成功? |
wulin 發(fā)表于 2024-1-11 22:12 能不能把你的代碼發(fā)上來(lái)參考一下,STC8H1K08A的8腳單片機(jī),ADC采集是P32。 |
hjx5548 發(fā)表于 2024-1-11 14:41 STC8G1H08A-PIN8 單片機(jī)的P32 |
wulin 發(fā)表于 2024-1-11 22:12 #include "STC8G.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int #define ADCTIM (*(unsigned char volatile xdata *)0xfea8) #define ADC_POWER 0x80 //ADC電源控制位1000 0000 #define ADC_START 0x40 //ADC啟動(dòng)控制位0100 0000 #define ADC_FLAG 0x20 //ADC完成標(biāo)志位0010 0000 #define ADC_EPWMT 0x10 //ADC使能控制位0001 0000 #define FOSC 1105920L //系統(tǒng)頻率 #define BAUD 11520 //串口波特率 uint ADC_A,ADC_B; void Delay1ms() //@11.0592MHz { unsigned char i, j; i = 15; j = 90; do { while (--j); } while (--i); } /*----------------------------- 初始化ADC ------------------------------*/ void UartInit() //可變波特率設(shè)置 115200bps@11.0592MHz { SCON = 0x50; //8位可變波特率 AUXR |= 0x14; //T2為1T模式 T2L = (65536 - (FOSC/4/BAUD)); //設(shè)置波特率重裝值 T2H = (65536 - (FOSC/4/BAUD))>>8; } void send_byte(uchar by) { SBUF = by; while (!TI); TI = 0; } void Init_ADC() { //ADC 控制器 電源 啟動(dòng) 完成 -- 15通道模擬選擇位 單片機(jī)STC8G1K08A-8PIN P30 0000 P31 0001 P32 0010 P33 0011 P54 0100 P55 0101 //ADC_CONTR B7 B6 B5 B4 B3 B2 B1 B0 P_SW2 |= 0x80; //打開(kāi) ADCTIM = 0x3f; //設(shè)置 ADC 內(nèi)部時(shí)序 P_SW2 &= 0x7f; //關(guān)閉 ADCCFG = 0x27; //設(shè)置ADC結(jié)果右對(duì)齊,速度為512系統(tǒng)時(shí)鐘 ADC_RES=0; //清除ADC_RES存儲(chǔ)器以前的結(jié)果 ADC_RESL=0; ADC_CONTR=ADC_POWER; //ADC 開(kāi)啟電源 Delay1ms(); //上電延時(shí)1ms } /*---------------------------- 讀取ADC結(jié)果 ----------------------------*/ uint GetADCResult(uchar CH) { ADC_CONTR=ADC_POWER|ADC_START|CH;//啟動(dòng)轉(zhuǎn)換1100 1000 STC8G1K08A-8PIN的CH P30 0000 P31 0001 P32 0010 P33 0011 P54 0100 P55 0101 _nop_();_nop_(); //小延時(shí) while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成標(biāo)志置位 1010 0000 ADC_CONTR &=~ADC_FLAG; //清完成標(biāo)志 return ADC_RES<<8|ADC_RESL; //返回十位ADC結(jié)果 } void main () { P3M0 = 0x00; P3M1 = 0x04; P5M0 = 0x00; P5M1 = 0x00; Init_ADC(); while(1) { ADC_A=GetADCResult(2); // ADC_B=GetADCResult(1); //添加顯示/控制代碼 send_byte(ADC_A/1000 + 0x30); send_byte(ADC_A%1000/100 + 0x30); send_byte(ADC_A%100/10 + 0x30); send_byte(ADC_A%10 + 0x30); send_byte(0x0a); Delay100ms(); Delay100ms(); Delay100ms(); } } //這個(gè)是你以前帖子,加入了串口發(fā)送,也是無(wú)法發(fā)送ADC ,芯片為8腳的STC8G1K08A ,ADC采集口P32 |
|
設(shè)置P32為ADC口,需要修改哪里? |
| #define BAUD 11520 //串口波特率,先單獨(dú)測(cè)試串口吧 |
hjx5548 發(fā)表于 2024-1-11 20:37
|
hjx5548 發(fā)表于 2024-1-11 14:41 ADC_CONTR |=0x40;//啟動(dòng)AD交換 后4位表示采集的通道 ADC0口 P30 0000 P31 0001 P32 0010 P33 0011 P54 0100 P55 0101 |
cocolala 發(fā)表于 2024-1-11 09:43 代碼是什么型號(hào)單片機(jī)? |
hjx5548 發(fā)表于 2024-1-11 14:42 上面改過(guò)的程序?qū)崪y(cè)串口可以正常發(fā)送ADC轉(zhuǎn)換值。問(wèn)題可能是你串口中斷與send_byte(uchar by)函數(shù)TI處理沖突。 |
wulin 發(fā)表于 2024-1-11 10:47 定時(shí)器后面還有代碼要用的。先謝謝了 |
cocolala 發(fā)表于 2024-1-11 09:43 謝謝啦,有空我試一下 |
用不到的函數(shù)屏蔽掉
|
Powered by 單片機(jī)教程網(wǎng)