CAN现场总线.rar

源代码在线查看: 01-外部中断.c

软件大小: 391 K
上传用户: l550253832
关键词: CAN 现场总线
下载地址: 免注册下载 普通下载 VIP

相关代码

				//	01-外部中断.c
				//	记录外部中断的次数(外部中断的次数),然后显示在数码管
				//	29-09-09 akuei2
				
				#include "reg52.h"
				#define uchar unsigned char
				
				sbit    SJA1000_CS  = P2^0;//SJA1000片选管脚. 低电平有效
				
				//定义数码管码
				uchar code Led_Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
				
				//定义位选码
				//0b111011111,0b11011111,0b10111111,0b01111111
				uchar code Led_Select[]={0xEF,0xDF,0xBF,0x7F};  
				
				int Click;
				
				//50微秒延迟函数
				void Delay_50us(int t)
				{
					uchar j; 
				    t--;
					for(;t>0;t--)  
				   		for(j=19;j>0;j--);
				    
				}
				
				//1毫秒延迟函数
				void Delay_1ms(int t)
				{
					uchar j; 
					for(;t>0;t--)  
				   		for(j=112;j>0;j--);
				    
				}
				
				//数码管显示函数
				void Display(void)
				{
					int Digit[4],i;
					Digit[3]=Click/1000;			//第一个数码管取千位
					Digit[2]=Click%1000/100;		//第二个数码管取百位
					Digit[1]=Click%100/10;			//第三个数码管取十位
					Digit[0]=Click%10;				//第四个数码管取个位
					for(i=0;i					{
						P0=Led_Code[Digit[3-i]];		//送数码管码
						P2=Led_Select[i];				//送位选码
						Delay_50us(20);					//延迟1微秒
						P0=P2=0xff;						//消影
					}
				}
				
				//初始化函数
				void Init(void)
				{
					IT0 = 1;		//外部中断0负边沿触发
				    EX0 = 1;		//打开外部中断0
				    EA = 1;  		//打开总中断
					SJA1000_CS = 1;	//片选无效
				}
				
				//主函数
				void main(void)
				{
					Init();
					while(1)
					{
						Display();
					}
				}
				
				//外部0中断函数
				void Ir_ex0(void) interrupt 0
				{
					EX0=0;EA=0;				//关闭外部中断0,关闭全局中断使能
					Delay_1ms(10);			//消抖
					Click++;				//记录按键次数
					if(Click>=10000) Click=0;	//如果案件超过一万次就回归0
					EX0=1;EA=1;					//开启外部中断0,开启全局中断使能
					
				
				}
							

相关资源