单片机模板程序(c)
扫描二维码
随时随地手机看文章
以下程序择晶振为12MHz
时钟i周期为晶振的倒数,位1/f(晶振),机器周期为时钟周期的12分频,即为12*1/f(晶振),故12MHz的机器周期为1us
定时器1/0
/******************************************************************************/
#include
#define uint unsigned int //宏定义,为了后面定义变量书写简便
#define uchar unsigned char
uchar mm=0; //全局变量
uchar flag_get=0; //定义标志位,为1则灯亮
/****************************************************************************/
/* 名称:延时函数 */
/* 功能:C语言中常用的for循环延时方法 */
/* 延时长短可以通过变量初值来改变 */
/****************************************************************************/
void Delay1ms(uint count)
{
uint i,j;
for(i=0;i for(j=0;j<110;j++); } /****************************************************************************/ /* 名称:主函数 */ /* 功能:利用定时器1每隔1秒使P1口LED灯全亮 */ /****************************************************************************/ void main() { TMOD=0x10; //设置T1工作于定时方式1(有16位计数) TH1=(65536-50000)/256; //定时器1赋初值,是TH1而不是TH0噢(若要设置是定时器0的话,把1改为0,下同);计数了50000次,即为50ms TL1=(65536-50000)%256; EA=1; //开总中断 ET1=1; //开定时器1中断 TR1=1; //开始计数 while(1) { if(flag_get==1) { P1=0x00; Delay1ms(200); flag_get=0; } else P1=0xff; } } /****************************************************************************/ /* 名称:定时器1中断 */ /* 功能:通过定时1秒产生中断使标志位置1 */ /****************************************************************************/ void timer1() interrupt 3 //注意了,这里是3,为定时器1的标号,若改为1的话则为定时器0,要区别于基于TMOD控制的工作方式和中断向量入口地址 { mm++; TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(mm==20) { mm=0; flag_get=1; } } 外部中断1/0 #include #define uint unsigned int //宏定义,为了后面定义变量书写简便 #define uchar unsigned char Init() { EX0 = 1; //打开外部中断(若要设置外部中断1的话,把0改为1,下同) IT0 = 1; //设置外部中断的脉冲触发方式 EA = 1; //开总中断 } void main (void) { Init(); while(1) { //you want。。。 } } void exter0(void) interrupt 0 //0位外部中断0的的标号,2为外部中断2的标号 { //you want。。。 }