|
#include "STC8G.h" //6路10位高速ADC(8路PWM可當(dāng)8路D/A使用) 00 0000 0000
#include "intrins.h"
unsigned int dy;unsigned char tempData[9];/*MCU發(fā)送到串行口的數(shù)據(jù)*/unsigned char shuzi[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};/*數(shù)組串行口顯示數(shù)值用*/
void UartInit() //9600bps@11.0592MHz
{
SCON=0x50;/*8位數(shù)據(jù),可變波特率*/AUXR|=0x40;/*定時(shí)器時(shí)鐘1T模式*/AUXR &= 0xFE;/*串口1選擇定時(shí)器1為波特率發(fā)生器*/TMOD&=0x0F;/*設(shè)置定時(shí)器模式*/
TL1=0xE0;/*設(shè)置定時(shí)初始值*/TH1=0xFE;/*設(shè)置定時(shí)初始值*/ET1= 0;/*禁止定時(shí)器%d中斷*/TR1 = 1;/*定時(shí)器1開始計(jì)時(shí)*/
}
void LED1()
{
P5M1=0;P5M0=0x20;//推挽輸出
}
void SendData(unsigned char dat)/* 串口發(fā)送字節(jié)數(shù)據(jù)函數(shù) 參數(shù)是你要發(fā)送的字節(jié) */
{
SBUF = dat;/*把要發(fā)送的數(shù)據(jù)給了SBUF寄存器*/while(!TI);/*等待數(shù)據(jù)發(fā)送完成*/TI = 0;/*清除發(fā)送完成標(biāo)志位*/
}
void SendString(unsigned char *puf) //發(fā)送一個(gè)字符串
{
while(*puf!='\0')/*遇到空格跳出循環(huán)*/{SendData(*puf);puf++;}SendData('\r');/*回車*/SendData('\n');/*換行*/
}
void adccx() //?只有8位數(shù)據(jù) 255
{
ADC_CONTR |= 0x40; //啟動(dòng)AD轉(zhuǎn)換
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20));//查詢ADC完成標(biāo)志
ADC_CONTR &= ~0x20; //清完成標(biāo)志
//dy = ADC_RES+ADC_RESL; //只讀取8位ADC結(jié)果
ADC_RESL=ADC_RESL&0XC0; //讀取10位的低字節(jié)2位
dy = (ADC_RES << 2)|ADC_RESL>>6;//讀取10位ADC結(jié)果
}
void adczh()
{
adccx();tempData[0]=shuzi[dy/1000]; tempData[1]=shuzi[dy%1000/100];tempData[2]=shuzi[dy%100/10]; tempData[3]=shuzi[dy%10];
SendString(tempData);//由0-9發(fā)送串口數(shù)值
}
void main()
{
unsigned char x =0; /* 定義一個(gè)8位變量 用于接收串口接收的字節(jié) */
P5M0 = 0x00;P5M1 = 0x10; /*設(shè)置ADC4(P5.4)為ADC口*/LED1(); /* IO設(shè)置*/ UartInit(); // 串口初始化
P_SW2 |= 0x80;ADCTIM = 0x3f;/*設(shè)置ADC內(nèi)部時(shí)序*/P_SW2 &= 0x7f;ADCCFG = 0x0f;/*設(shè)置ADC時(shí)鐘為系統(tǒng)時(shí)鐘/2/16*/ADC_CONTR = 0x80;/*使能ADC模塊*/
while (1)
{
adczh();
if (RI)// 如果串口接收到數(shù)據(jù)
{
RI = 0; //清中斷標(biāo)志
x =SBUF;
SendData(SBUF); // 把接收的數(shù)據(jù)再發(fā)送出去
if (x == 0x02)
{
P55 = !P55; //翻轉(zhuǎn)led狀態(tài)
}
}
}
}
void Uart() interrupt 4
{
if (RI)/*接收中斷標(biāo)志位*/{RI = 0;/*清除RI位*/}if (TI)/*發(fā)送中斷標(biāo)志位*/{TI = 0;/*清除TI位*/}
}
|
評(píng)分
-
查看全部評(píng)分
|