?? 7135_finish.c
字號:
//*************************************************
//測試功能:7135的ad功能。將采集到的數據以四位由高到低發給上位機顯示
//測試方法:注意:采集到的電壓單位為mv
//測試結果:ok
//時鐘頻率:外部8m
//管腳分配:1腳(pb0)接7135的25,4腳(pb3)接7135的22
//16腳(pd2)接7135的21 t2計量busy信號內部時鐘的個數
//注意事項:基準電壓為:1v.輸入電壓不大于2v
//完成時間:2009.03.22
//**************************************************
//**************************************************
//頭文件
//**************************************************
#include <iom16v.h>
#include <macros.h>
//**************************************************
//*****************************************************
//全局變量定義
//*****************************************************
unsigned char N=0;//用來區別是第一次外部中斷還是第二次中斷
unsigned int T2OVF_NUM=0;//用來計定時器T2的溢出次數
unsigned long int T2_NUM;//T2計的總時鐘的個數
unsigned int VIN;//測到的電壓,單位為mv
//*****************************************************
//函數聲明
//*****************************************************
void DELAY_1MS(void);
void DELAY_NMS(unsigned int n);
void PORT_INIT(void);
void INT0_INIT(void);
void T2_INIT(void);
void T0_125K(void);
void USART_INIT(void);
void USART_TX(unsigned char data);
void DATA_DISPLAY(unsigned int data);
//*****************************************************
//函數名稱:void DELAY_1MS(void)
//函數功能:延時1ms
//注意事項:i=143*n-2
//*****************************************************
void DELAY_1MS(void)
{
unsigned int i;
for(i=1142;i>0;i--)
;
}
//*****************************************************
//函數名稱:void DELAY_NMS(void)
//函數功能:延時Nms
//注意事項:
//*****************************************************
void DELAY_NMS(unsigned int n)
{
for(;n>0;n--)
DELAY_1MS();
}
//*****************************************************
//函數名稱:void INT0_INIT(void)
//函數功能:int0初始化,上升沿產生中斷,使能中斷
//注意事項:未開總中斷
//*****************************************************
void PORT_INIT(void)
{
DDRB=0X09;
PORTB=0X00;
DDRD=0X00;
PORTD=0XFF;
}
//**********************************************************
//函數名稱:void T0_250K(void)
//函數功能:t0工作于CTC模式,產生250k方波
//注意事項:一分頻,pb3(oc0)接7135 clk
//**********************************************************
void T0_125K(void)
{
TCCR0=0X00;
TCNT0=0X00;
OCR0=31;
TIMSK&=~(1<<OCIE0);
TCCR0=0X19;
}
//*****************************************************
//函數名稱:void INT0_INIT(void)
//函數功能:int0初始化,上升沿產生中斷,使能中斷
//注意事項:未開總中斷
//*****************************************************
void INT0_INIT(void)
{
MCUCR|=((1<<ISC01)|(1<<ISC00));
GICR|=(1<<INT0);
}
//*****************************************************
//函數名稱:void INT0_INTERRUPT(void)
//函數功能:中斷處理,N+1
//注意事項:
//*****************************************************
#pragma interrupt_handler INT0_INTERRUPT:2
void INT0_INTERRUPT(void)
{
if(!N)
{
TCCR2=0X01;//開始內部計數
MCUCR=0X02;//設置外部中斷0下降沿產生中斷
N++;
}
else
{
TCCR2=0X00;//定時器t1停止工作
CLI();//關中斷,進行數據處理
//數據處理
T2_NUM=T2OVF_NUM;
T2_NUM=(T2_NUM*256+TCNT2);
T2_NUM/=64;
T2_NUM-=10001;
VIN=T2_NUM/10;
DATA_DISPLAY(VIN);
//數據處理結束
T2OVF_NUM=0;
TCNT2=0X00;
MCUCR|=((1<<ISC01)|(1<<ISC00));//設置外部上升沿中斷
N=0;//
PORTB&=~(1<<0);//上位機發0x01,測量一次,停止ad
//SEI();先進行1次采樣
}
}
//**************************************************
//函數名稱:void T1_INIT(void)
//函數功能:內部定時
//注意事項,定時器未工作,定時器工作,需+TCCR1B=0X01;
//**************************************************
/*void T1_INIT(void)
{
TCCR1A=0X00;
TCNT1=0X0000;
TIMSK|=(1<<TOIE1);
}*/
//**************************************************
//函數名稱:void T1_INIT(void)
//函數功能:內部定時
//注意事項,定時器未工作,定時器工作,需+TCCR1B=0X01;
//**************************************************
void T2_INIT(void)
{
//TCCR1A=0X00;
TCNT2=0X00;
TIMSK|=(1<<TOIE2);//使能t2溢出中斷
TCCR2=0X01;//普通模式,1倍頻,定時器開始工作
}
//**************************************************
//函數名稱:void T1_OVF(void)
//函數功能:ti溢出處理
//注意事項:
//**************************************************
#pragma interrupt_handler T2_OVF:5
void T2_OVF(void)
{
T2OVF_NUM++;
}
//**************************************************
//函數名稱:void T1_OVF(void)
//函數功能:ti溢出處理
//注意事項:
//**************************************************
/*#pragma interrupt_handler T1_OVF:9
void T1_OVF(void)
{
T2OVF_NUM++;
}*/
//*****************************************************
//函數名稱:void USART_INIT(void)
//函數功能:8M,波特率9600
//注意事項:
//*****************************************************
void USART_INIT(void)
{
UBRR=0X33;//fosc=8mhz,波特率9600
UCSRA=0X20;
UCSRC=0X86;
UCSRB=0X98;
}
//*****************************************************
//函數名稱:void USART_INIT(void)
//函數功能:8M,波特率9600
//注意事項:
//*****************************************************
void USART_TX(unsigned char data)
{
UDR=data;
while(!(UCSRA&(1<<TXC)))
;
DELAY_NMS(1);
}
//*****************************************************
//函數名稱:void USART_INIT(void)
//函數功能:下位機收到0x01,則進行1次ad轉換
//注意事項:
//*****************************************************
#pragma interrupt_handler usart_receive:12
void usart_receive(void)
{
unsigned char d;
d=UDR;
if(d==0x01)
{
PORTB|=(1<<0);
SEI();
}
else
{
PORTB&=~(1<<0);
CLI();
}
}
//*****************************************************
//函數名稱:void USART_INIT(void)
//函數功能:8M,波特率9600
//注意事項:
//*****************************************************
void DATA_DISPLAY(unsigned int data)
{
unsigned char temp[4],i;
temp[0]=data/1000;
temp[1]=(data/100)%10;
temp[2]=(data/10)%10;
temp[3]=data%10;
for(i=0;i<4;i++)
{
USART_TX(temp[i]);
DELAY_NMS(1);
}
}
//**********************************************************
//主函數
//**********************************************************
void main(void)
{
CLI();
PORT_INIT();
T0_125K();
INT0_INIT();
T2_INIT();
USART_INIT();
SEI();
//PORTB|=(1<<0);//先不 進行ad采樣,等待上位機命令
while(1)
;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -