STC12C5201AD芯片运用总结
1、 内部含有8路AD转化
2、 首要声明与AD转化有关的寄存器
Sfr ADC_CONTR =0XBC;//AD转化操控寄存器的地址
Sfr ADC_RES=0XBD;//AD转化成果寄存寄存器
Sfr P1ASF=0x9d;//P1口模仿功用操控寄存器
//哪个方位1,P1.0-P1.7就设定为AD转化功用
3、 为了使程序的更具灵活性,能够独自设定ADC_CONTR的每一位。
#define ADC_POWER 0X80;//一切ADC电源操控为,第7位
#define ADC_FLAG 0X10;//AD转化完结标志位,第4位,
#define ADC_START 0X08;//AD转化开端标志位,第3位,
#define ADC_SPEEDLL 0X00;//AD转化速度操控位,第5、6位
//420 clocks
#define ADC_SPEEDL 0x20;//280 clocks
#define ADC_SPEEDH 0x40;//140 clocks
#define ADC_SPEEDHH 0x60;//70 clocks
4、 初始化ADC
Void initADC(void)
{
P1ASF=0X01;//设置哪个P1口进行ADC
//0X01 P1.0
//0X02 P1.1
//0X03 P1.0和P1.1
//0XFF 悉数8个口
ADC_RES=0;//成果寄存器清零
ADC_CONTR=ADC_POWER|ADC_SPEEDLL//翻开ADC电源并设置转化速率
Delay(2);//软件延时2ms
}
5、 读取ADC的成果
Uchar getADCresult(uchar ch)//ch为要读取的通道的值,0-7
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL |ADC_START|ch;
//设置ADC操控寄存器,翻开485dec0615dad85&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1831118&u=http%3A%2F%2Fwww%2E51hei%2Ecom%2Fmcu%2F2981%2Ehtml&urlid=0″ id=”8_nwl” mpid=”8″ target=”_blank”>电源,设置转化速率、翻开开端,设置转//换通道
_nop_();//设置ADC_CONTR操控寄存器的句子履行后,要经过4个CPU时钟的延时,
//其值才能够确保设置进ADC_CONTR操控寄存器
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR & ADC_FLAG));//wait complete flag
ADC_CONTR&=~ADC_FLAG;//close ADC
return ADC_RES;//return ADC result
}
AD转化的成果为8位数据,就存储在ADC_RES寄存器中,
其值为:ADC_RES[0:7]=256 X Vin/Vcc
为了便利运用转化的值编制其他的操控程序及调试,能够将转化后的数据经过串口发送出来,然后运用串口调试东西进行监控。这就涉及到串口通讯程序的编制。
串口通讯程序的编制(只发不收):
1、 为进步程序的适应性能够先对通讯的波特率和晶振频率进行宏界说。
#define BAUD 9600//9600的波特率
#define FOSC 11059200L //11.0592M的晶振
2、 串口初始化
Void initUART()
{
SCON=0X5A;//8位数据,无校验位
TMOD=0X20;//设置守时器1作业在8位主动重装的形式
TH1=TL1=-(FOSC/12/32/BAUD);//T1装初值
TR1=1;//开守时器1
}
当然这段程序也能够运用STC供给的波特率计算器来主动生成,如下:
void UartInit(void)//9600bps@11.0592MHz
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xbf; //守时器1时钟为Fosc/12,即12T
AUXR &= 0xfe; //串口1挑选守时器1为波特率发生器
TMOD &= 0x0f; //铲除守时器1形式位
TMOD |= 0x20; //设定守时器1为8位主动重装方法
TL1 = 0xFD; //设定守时初值
TH1 = 0xFD; //设定守时器重装值
ET1 = 0; //制止守时器1中止
TR1 = 1; //发动守时器1
}
但要留意声明特别辅佐寄存器AUXR
Sfr AUXR=0X8E;
3、 发送数据
Void senddata(uchar dat)
{
While(!TI);//等候前面的数据发送结束
TI=0;//TI标志清零
SBUF=dat;//发送当时的数据
}
这样只需调用发送数据函数就能够在串口调试软件中看到数据了。
当然你也能够运用74HC595和数码管做一个显现电路来监控,这个电路今后再总结。