|
/************* 功能說明 **************
程序適用:STC8G全系列和STC8H全系列
選擇晶振:內(nèi)部11.0592MH
復(fù)位電路:內(nèi)部復(fù)位
參考電壓:VCC
功能:3通到AD采集功能,P1.2、P1.3、P1.4為輸入腳(開發(fā)板上排針為RT、30,31腳)
通過杜邦線把RT連接開發(fā)板AD腳進行電位器進行電壓變化
30,31可以接外部0到5V電壓輸入。 接GND,VCC,3V,做測試
******************************************/
#include "STC8G.H"
#include "system.h"
#include "STC8G_10AD.h"
#include "USART.h"
typedef unsigned int WORD; //延時函數(shù)
#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
#define A P11
#define MAIN_Fosc 11059200UL //定義主時鐘
#define Timer0_Reload (MAIN_Fosc / 1000) //Timer 0 中斷頻率, 1000次/秒
//unsigned int GetADCResult(unsigned char channel);
u8 t0_ct; //延時函數(shù)
u8 Vdat1,channel;
unsigned int adc_temp; //延時函數(shù)標(biāo)記使用
unsigned int temp_ad;
bit AD_change_bit;
//u8 data lcd_buff_1[16];
//u8 data lcd_buff_2[16];
void IO_init_config(void);
void display_buff(void);
//========================================================================
// 函數(shù): void timer0_int (void) interrupt TIMER0_VECTOR
// 描述: timer0中斷函數(shù).
//========================================================================
void timer0_int (void) interrupt 1
{
if(++t0_ct >= 100) //0.1S 延時可調(diào)
{
t0_ct = 0; //延時函數(shù)
AD_change_bit = 1;
}
}
void Timer0_init(void)
{
TR0 = 0; //停止計數(shù)
ET0 = 1; //允許中斷
// PT0 = 1; //高優(yōu)先級中斷
TMOD &= ~0x03;
TMOD |= 0; //工作模式, 0: 16位自動重裝, 1: 16位定時/計數(shù), 2: 8位自動重裝, 3: 16位自動重裝, 不可屏蔽中斷
// TMOD |= 0x04; //對外計數(shù)或分頻
TMOD &= ~0x04; //定時
// INTCLKO |= 0x01; //輸出時鐘
INTCLKO &= ~0x01; //不輸出時鐘
// AUXR |= 0x80; //1T mode
// TH0 = (u8)((65536UL - Timer0_Reload) / 256);
// TL0 = (u8)((65536UL - Timer0_Reload) % 256);
AUXR &= ~0x80; //12T mode
TH0 = (u8)((65536UL - Timer0_Reload/12) / 256);
TL0 = (u8)((65536UL - Timer0_Reload/12) % 256);
TR0 = 1; //開始運行
EA = 1;
}
void main()
{
unsigned int res=0;
unsigned char result[4]={0}; //unsigned char result[4]={0};
// unsigned int temp; //全局變量
P1M1 = 0x01;
P1M0 = 0x00;; //P1設(shè)置為準(zhǔn)雙向口
InitSerialPort(); //初始化串口,波特率9600,8bit數(shù)據(jù)位,1停止位,無校驗
IO_init_config();
Timer0_init();
STC8G_ADC_Iint(); //STC8G系列10位AD初始化函數(shù)
P_SW2 |= 0x80; //打開 外設(shè)端口切換寄存器
P_SW2 &= 0x7f; //關(guān)閉 外設(shè)端口切換寄存器
ADCTIM = 0x3f; //設(shè)置ADC內(nèi)部時序
ADCCFG = 0x0f; //設(shè)置ADC時鐘為系統(tǒng)時鐘/2/16
while(1)
{
if(AD_change_bit) //0.1S改變顯示一次
{
SendByte('\t'); //發(fā)送數(shù)據(jù)采集結(jié)果
SendString("AD_Value = "); //發(fā)送數(shù)據(jù)采集結(jié)果
// SendByte(HEX2ASCII(disbuff[0]));
GetADC10bitResult_Char(channel,result);
SendByte(channel);
SendByte(result);
SendByte('\n'); //發(fā)送數(shù)據(jù)采集結(jié)果
AD_change_bit = 0;
ADC_CONTR = 0x80; //打開ADC電源
temp_ad = Get_ext_Vx(1);
GetADC10bitResult( channel); //讀取ADC結(jié)果
ADC_CONTR|=0x01; // 設(shè)定轉(zhuǎn)換的通道,P3.3是0011
ADC_CONTR|=0x40; // 開始AD轉(zhuǎn)換,即ADC_START=1
temp_ad =ADC_RES; //讀取轉(zhuǎn)換結(jié)果
temp_ad=temp_ad<<2; //左移2位
temp_ad=temp_ad|ADC_RESL; //讀取ADC_FLAG保存軟件
adc_temp=temp_ad; //adc加載寄存器數(shù)據(jù)
// display_buff();
// for(k=11;k<16;k++)
// {
// LCD_Write_Char(k,0,lcd_buff_1[k]); //顯示通道2--P1.2
// }
if(temp_ad>10) //ADC采集電壓范圍 210=1V
{
P55=0;
}
else //表示如果滿足if條件則不執(zhí)行else,否則執(zhí)行else
{
P55=1;
}
}
}
}
//void display_buff(void)
//{
// lcd_buff_1[11] = (temp_ad/1000)+0x30; //通到2
// lcd_buff_1[12] = '.';
// lcd_buff_1[13] = (temp_ad%1000/100)+0x30;
// lcd_buff_1[14] = (temp_ad%1000%100/10)+0x30;
// lcd_buff_1[15] = (temp_ad%1000%100%10)+0x30;
//
//}
/*****************
STC8系列任何型號必須初始化配置IO口模式,
其它IO口的功能設(shè)置,可以不用初始化。
原因:上電除了P3.1和P3.0為準(zhǔn)雙向IO口模式外,其它為高阻輸入模式
*************/
void IO_init_config(void)
{ //PxM1和PxM0必須要初始化配置,不然IO口不能正常輸入輸出
A=0;
P0M1 = 0x00;
P0M0 = 0x00;; //P0設(shè)置為準(zhǔn)雙向口
P1M1 = 0x00;
P1M0 = 0x00;; //P1設(shè)置為準(zhǔn)雙向口
P2M1 = 0x00;
P2M0 = 0x00;; //P2設(shè)置為準(zhǔn)雙向口
P3M1 = 0x00;
P3M0 = 0x00;; //P3設(shè)置為準(zhǔn)雙向口
P4M1 = 0x00;
P4M0 = 0x00;; //P4設(shè)置為準(zhǔn)雙向口
P5M1 = 0x00;
P5M0 = 0x00;; //P5設(shè)置為準(zhǔn)雙向口
// P0PU = 0x00; //0禁內(nèi)部上拉4.1K電阻,1打開內(nèi)部上拉4.1K電阻
// P1PU = 0x00; //0禁內(nèi)部上拉4.1K電阻,1打開內(nèi)部上拉4.1K電阻
// P2PU = 0x00; //0禁內(nèi)部上拉4.1K電阻,1打開內(nèi)部上拉4.1K電阻
// P3PU = 0x00; //0禁內(nèi)部上拉4.1K電阻,1打開內(nèi)部上拉4.1K電阻
// P4PU = 0x00; //0禁內(nèi)部上拉4.1K電阻,1打開內(nèi)部上拉4.1K電阻
// P5PU = 0x00; //0禁內(nèi)部上拉4.1K電阻,1打開內(nèi)部上拉4.1K電阻
//
// P0NCS = 0x00; //0使能施密特觸發(fā)功能,1禁止施密特觸發(fā)功能
// P1NCS = 0x00; //0使能施密特觸發(fā)功能,1禁止施密特觸發(fā)功能
// P2NCS = 0x00; //0使能施密特觸發(fā)功能,1禁止施密特觸發(fā)功能
// P3NCS = 0x00; //0使能施密特觸發(fā)功能,1禁止施密特觸發(fā)功能
// P4NCS = 0x00; //0使能施密特觸發(fā)功能,1禁止施密特觸發(fā)功能
// P5NCS = 0x00; //0使能施密特觸發(fā)功能,1禁止施密特觸發(fā)功能
//
// P0SR = 0xff; //0電平轉(zhuǎn)換速度快,1電平轉(zhuǎn)換速度慢
// P1SR = 0xff; //0電平轉(zhuǎn)換速度快,1電平轉(zhuǎn)換速度慢
// P2SR = 0xff; //0電平轉(zhuǎn)換速度快,1電平轉(zhuǎn)換速度慢
// P3SR = 0xff; //0電平轉(zhuǎn)換速度快,1電平轉(zhuǎn)換速度慢
// P4SR = 0xff; //0電平轉(zhuǎn)換速度快,1電平轉(zhuǎn)換速度慢
// P5SR = 0xff; //0電平轉(zhuǎn)換速度快,1電平轉(zhuǎn)換速度慢
//
// P0DR = 0xff; //0增強驅(qū)動能力,1一般驅(qū)動能力
// P1DR = 0xff; //0增強驅(qū)動能力,1一般驅(qū)動能力
// P2DR = 0xff; //0增強驅(qū)動能力,1一般驅(qū)動能力
// P3DR = 0xff; //0增強驅(qū)動能力,1一般驅(qū)動能力
// P4DR = 0xff; //0增強驅(qū)動能力,1一般驅(qū)動能力
// P5DR = 0xff; //0增強驅(qū)動能力,1一般驅(qū)動能力
//
// P0IE = 0xff; //0禁止數(shù)字信號輸入,1使能數(shù)字信號輸入
// P1IE = 0xff; //0禁止數(shù)字信號輸入,1使能數(shù)字信號輸入
// P3IE = 0xff; //0禁止數(shù)字信號輸入,1使能數(shù)字信號輸入
}
|
|