网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

c语言外部中断初始化函数 c语言中中断函数

交通灯 C语言 单片机。中断函数问题

参考《51单片机C语言创新教程》温子祺等著。

创新互联专注于固镇网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供固镇营销型网站建设,固镇网站制作、固镇网页设计、固镇网站官网定制、小程序制作服务,打造固镇网络公司原创品牌,更为您提供固镇网站排名全网营销落地服务。

源码转自:《51单片机C语言创新教程》。

/*实验名称:交通灯实验

*描    述:交通灯实验要求红灯亮15秒,绿灯亮10秒,黄灯亮5秒,

当红灯切换为绿灯或者绿灯切换为红灯,

   要实现灯闪烁。红灯、绿灯、黄灯的点亮持续时间可以通过串口来修改,

   并在下一个循环中更新数值。

*作    者:温子祺

*修改日期:2010/5/4

*说    明:代码注释与讲解详见《51单片机C语言创新教程》温子祺等著,北京航空航天大学出版社

*/

#include "stc.h"

typedef unsigned char   UINT8;

typedef unsigned int UINT16;

typedef unsigned long   UINT32;

typedef char            INT8;

typedef int             INT16;

typedef long            INT32;

#define TIMER0_INITIAL_VALUE 5000

#define HIGH               1

#define LOW                0

#define ON                 1

#define OFF                0

#define SEG_PORT           P0

#define LS164_DATA(x)      {if((x))P0_4=1;else P0_4=0;}

#define LS164_CLK(x)       {if((x))P0_5=1;else P0_5=0;}

#define NORTH_R_LIGHT(x)   {if((x))P2_0=0;else P2_0=1;}

#define NORTH_Y_LIGHT(x)   {if((x))P2_1=0;else P2_1=1;}

#define NORTH_G_LIGHT(x)   {if((x))P2_2=0;else P2_2=1;}

#define SOUTH_R_LIGHT(x)   {if((x))P2_3=0;else P2_3=1;}

#define SOUTH_Y_LIGHT(x)   {if((x))P2_4=0;else P2_4=1;}

#define SOUTH_G_LIGHT(x)   {if((x))P2_5=0;else P2_5=1;}

#define TRAFFIC_STATUS_1   0

#define TRAFFIC_STATUS_2   1

#define TRAFFIC_STATUS_3   2

#define UART_MARKER        0xEE

UINT8  Timer0IRQEvent=0;

UINT8  Time1SecEvent=0;

UINT8  Time500MsEvent=0;

UINT8  TimeCount=0;

UINT8  SegCurPosition=0;

UINT8  LightOrgCount[4]={15,5,15,5};

UINT8  LightCurCount[4]={15,5,15,5};

UINT8  TrafficLightStatus=0;

code UINT8  SegCode[10]   ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

UINT8  SegBuf[4]     ={0};

code UINT8  SegPosition[4]={0x07,0x0b,0x0d,0x0e};

typedef struct _LIGHT_VAL

{

UINT8 Head;

UINT8 val[4];

}LIGHT_VAL;

typedef union _LIGHT_VAL_EX

{

LIGHT_VAL lv;

UINT8    p[5];

}LIGHT_VAL_EX;

void LS164Send(UINT8 byte)

{

UINT8 j;

for(j=0;j=7;j++)

{

if(byte(1(7-j)))

{

LS164_DATA(HIGH);

 }

 else

 {

LS164_DATA(LOW);

 }

LS164_CLK(LOW);

LS164_CLK(HIGH);

}

}

void RefreshDisplayBuf(UINT8 s1)  //刷新显示缓存

{

SegBuf[0] = s1%10;

SegBuf[1] = s1/10;

SegBuf[2] = s1%10;

SegBuf[3] = s1/10;

}

void SegDisplay(void)

{

UINT8  t;

t = SegCode[SegBuf[SegCurPosition]];

SEG_PORT |= 0x0f;

LS164Send(t);

SEG_PORT = (SEG_PORT|0x0f)  SegPosition[SegCurPosition];

if(++SegCurPosition=4)

{

SegCurPosition=0;

}

}

void TimerInit(void)

{

TH1 = 0;

TL1 = 0;

TH0 = (65536-TIMER0_INITIAL_VALUE)/256;

TL0 = (65536-TIMER0_INITIAL_VALUE)%256; //定时1MS

TMOD = 0x51; /*01010001 T1计数,T0定时*/

}

void Timer0Start(void)

{

TR0 = 1; //启动计时器1

 ET0 = 1;

}

void Timer0Stop(void)

{

TR0 = 0; //启动计时器1

ET0 = 0;  

}

void PortInit(void)

{

 P0=P1=P2=P3=0xFF;

}

void UartInit(void)

{

SCON=0x40;

T2CON=0x34;

RCAP2L=0xD9;

RCAP2H=0xFF;

REN=1;

ES=1;

}

void UartSendByte(UINT8 byte)

{

SBUF=byte;

while(TI==0);

TI=0;

}

void UartPrintfString(INT8 *str)

{

while(str  *str)

{

UartSendByte(*str++);

}

}

void main(void)

{

UINT8 i=0;

PortInit();

TimerInit();

Timer0Start();

UartInit();

RefreshDisplayBuf(LightCurCount[0]);

EA=1;

NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

while(1)

{

if(Timer0IRQEvent)

{

Timer0IRQEvent=0;

TimeCount++;

if(TimeCount=200)

{

TimeCount=0;

if(LightCurCount[0])

{

TrafficLightStatus=0;

}

else if(LightCurCount[1])

{

TrafficLightStatus=1;

}

else if(LightCurCount[2])

{

TrafficLightStatus=2;

}

else if(LightCurCount[3])

{

TrafficLightStatus=3;

}

else

{

for(i=0;i4;i++)

{

LightCurCount[i]=LightOrgCount[i];

}

TrafficLightStatus=0;

}

switch(TrafficLightStatus)

{

case 0:

{

NORTH_R_LIGHT(ON);

SOUTH_R_LIGHT(OFF);

NORTH_G_LIGHT(OFF);

SOUTH_G_LIGHT(ON);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case 1:

{

if(LightCurCount[1]%2)

{

   NORTH_R_LIGHT(ON);

SOUTH_G_LIGHT(ON);

}

else

{

   NORTH_R_LIGHT(OFF);

SOUTH_G_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;

case 2:

{

NORTH_R_LIGHT(OFF);

SOUTH_R_LIGHT(ON);

NORTH_G_LIGHT(ON);

SOUTH_G_LIGHT(OFF);

NORTH_Y_LIGHT(OFF);

SOUTH_Y_LIGHT(OFF);

}

break;

case 3:

{

if(LightCurCount[3]%2)

{

   NORTH_G_LIGHT(ON);

SOUTH_R_LIGHT(ON);

}

else

{

   NORTH_G_LIGHT(OFF);

SOUTH_R_LIGHT(OFF);

}

NORTH_Y_LIGHT(ON);

SOUTH_Y_LIGHT(ON);

}

break;

default:break;

}

RefreshDisplayBuf(LightCurCount[TrafficLightStatus]);

LightCurCount[TrafficLightStatus]--;

}

SegDisplay();

}

}

}

void UartIRQ(void)interrupt 4

{

static UINT8 cnt=0;

static LIGHT_VAL_EX LightValEx;

if(RI)

{

RI=0;

 LightValEx.p[cnt++]=SBUF;

if(LightValEx.lv.Head == UART_MARKER)

{  

if(cnt=5)

{

for(cnt=1;cnt5;cnt++)

{

LightOrgCount[cnt-1]=LightValEx.lv.val[cnt];

LightCurCount[cnt-1]=LightValEx.lv.val[cnt];

}

cnt=0;

UartPrintfString("设置交通灯完成\r\n");

}

}

else

{

cnt=0;

}

}

}

void Timer0IRQ(void) interrupt 1

{

ET0 =  0;

TH0 = (65536-TIMER0_INITIAL_VALUE)/256;

TL0 = (65536-TIMER0_INITIAL_VALUE)%256; //定时1MS

Timer0IRQEvent=1;

ET0 =  1;

}

=====================================================================

坐等拿分!

求一个单片机的外部中断。 要求c语言完成中断实验及中断优先权实验,分别用三个数码管表示仿真和程序

我用单片机做小车,用C语言编程,想用中断但是不知道怎么用,比如小车跑的好好的,来了个信号他就可以中止现在的程序执行另一个程序,但是又不能用查询的方式一直查是否有这个信号来,所以要用到中断,谁知道指点一下我啊,最好是有程序实例,谢谢~~

最佳答案 #include reg51.h

void init(void)//声明中断初始化

{ EA=1;//中断总开关

EX0=1;//开中断0开关。中断1为,EX1=1;

IT1=1;//采用边沿触发,下降沿有效。IT1=0为低电平触发中断。

}

main()

{ init();调用中断初始化函数

==

===主程序;

}

void in_0(void)interrupt 0//中断服务函数

{ ==

==要服务的程序

}

C语言编写外部中断1为跳沿触发的中断初始化函数

1.SETB EA ;中断总允许

SETB EX1 ;外中断1允许

SETB IT1 ;脉冲方式(当IT1为0时,为电平方式)

然后就可以定义你要的初值。

2.边沿触发最大的特点是只在水平的边缘改变外翻盖奖励的那一刻是有效的。相对JK主站和从站中,良好的稳定性的优点,激励电平只需要保证在短时间内向边缘稳定,外界干扰的窗口是小的。

AT89C51单片机,定时器1,50ms中断,用c语言写出初始化程序和中断函数程序

#include reg51.h

void InitTimer1(void)

{

TMOD = 0x10;

TH1 = 0x3C;

TL1 = 0x0B0;

EA = 1;

ET1 = 1;

TR1 = 1;

}

void main(void)

{

InitTimer1();

}

void Timer1Interrupt(void) interrupt 3

{

TH1 = 0x3C;

TL1 = 0x0B0;

//add your code here!

}

单片机C语言中,设外中断为边沿触发, 高级中断 编写中断初始化main的函数

这是单片机c语言中断函数的编程格式,()后面的只是告诉编译系统该函数是一个中断函数,具体的执行还是按照c语言函数的执行方式去执行。


当前题目:c语言外部中断初始化函数 c语言中中断函数
文章地址:http://bjjierui.cn/article/hhddoc.html

其他资讯