Atmega16单片机实用程序
for(count=7;count>
ACSR&=~BIT(7); //使能模擬比較器,注意此處為低電平有效;
ACSR&=~BIT(6); //設置AIN0為正極輸入端;
ACSR|=BIT(3); //使能模擬比較器中斷;
ACSR|=(BIT(1)|BIT(0)); //比較器上升沿觸發中斷;
}
#pragma interrupt_handler comp:17 //注意函數名後不加();
void comp() //模擬比較器中斷服務程序;
{
ACSR&=~BIT(3);
/*************
此處加中斷處理函數
**************/
ACSR|=BIT(3);
}
/**********************************************************
名稱:外部中斷INT0 調試OK
功能:低電平觸發INT0端口引起中斷,並響應相關中斷服務程序
**********************************************************/
void int0_init()
{
DDRD&=~BIT(2); //PD2/INT0端口配置為輸入;
MCUCR&=((~BIT(0))&(~BIT(0))); //INT0觸發方式為低電平;
GICR|=BIT(6); //使能外部中斷0;
SEI(); //開總中斷;
}
#pragma interrupt_handler int0:2
void int0() //INT0中斷服務函數;
{
GICR&=~BIT(6); //關閉外部INT0;
/************************
此處加INT0中斷處理函數
************************/
GICR|=BIT(6); //開啟外部INT0;
}
/*********************************************************
名稱:外部中斷INT1,
功能:邊沿觸發INT0端口引起中斷,並響應相關中斷服務程序
**********************************************************/
void int1_init()
{
DDRD&=~BIT(3); //將PD3口配置為輸入;
PORTD&=~BIT(3); //pd3口初始值為0;
MCUCR|=(BIT(3)|BIT(2)); //INT1上升沿觸發中斷;
GICR|=BIT(7); //使能INT1中斷;
SEI(); //開總中斷;
}
#pragma interrupt_handler int1:3
void int1()
{
GICR&=~BIT(7); //關閉INT1中斷;
/*******************************
此處加INT1中斷服務函數;
*******************************/
GICR|=BIT(7); //開啟INT1中斷;
}
/**********************************************************
/**********************************************************
名稱:12864(ks0108)顯示應用
功能:圖形液晶使用
**********************************************************/
#define EN_CLR PORTD&=~BIT(0) //使能12864
#define EN_SET PORTD|=BIT(0) //關閉12864
#define RW_READ PORTD|=BIT(1) //讀操作
#define RW_WRITE PORTD&=~BIT(1) //寫操作
#define RS_COMM PORTD&=~BIT(2) //命令操作
#define RS_DATA PORTD|=BIT(2) //數據操作
#define RESET PORTD&=~BIT(3) //12864液晶複位
#define RESET_OVER PORTD|=BIT(3) //12864液晶結束複位;
#define CS1_EN PORTD&=~BIT(4) //使能CS1,選擇左半屏幕;
#define CS1_DIS PORTD|=BIT(4) //禁止CS1
#define CS2_EN PORTD&=~BIT(5) //使能CS2,選擇右半屏幕;
#define CS2_DIS PORTD|=BIT(5) //禁止CS2
#define basic_com 0x30 //一次送8BIT數據,基本指令集;
#define explo_com 0xc4 //擴展指令集
#define show_stitude 0x0f //顯示狀態,整體顯示,游標開,游標位置開
#define cleanscreen 0x01 //顯示清零,AC歸零
#define cursor 0x07 //写入/讀取时,游标右移,畫面左移
#define AC_0 0x03 //AC归0,不改变DDRAM内容
const int char_0816[]={
0xe0,0x18,0x04,0x04,0x04,0x18,0xe0,0x00,
0x07,0x18,0x20,0x20,0x20,0x18,0x07,0x00
};
/************************************************************
名稱:MCU端口初始化
功能:設置MCU端口初始方向以及狀態
*************************************************************/
void GPIO_INIT()
{
DDRA=0XFF;
PORTA=0X00;
DDRB=0XFF;
PORTA=0X00;
DDRC=0XFF;
PORTA=0X00;
DDRD=0XFF;
PORTA=0X00;
}
/****************************************************************
名稱:輸入數據
功能:MCU將數據送到總線
*****************************************************************/
void SET_DATA(uchar data)
{
delayus(3);
PORTC=
Atmega16单片机实用程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)