c51中断/定时寄存器的典型运用程序

发布者:温柔浪漫最新更新时间:2016-10-10 来源: eefocus关键字:c51  中断  定时寄存器 手机看文章 扫描二维码
随时随地手机看文章
c51中断/定时寄存器的典型运用程序 -  此生不換? - 此生不換?de博客

 

程序如下:

 

#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
uchar temp,t0,t1,bai,shi,ge,flag,flag1;
uint shu;
void init();
void display(uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uint z)
{
 uint t1,y;
 for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}
void main()
{
 init();
 while(1)
 {
  if(flag1!=1)
   display(7,6,5,bai,shi,ge);
  else
   display(16,17,18,18,19,20); 
 }
}

void init()
{
 shu=432;
 temp=0xfe;
 P1=temp;
 TMOD=0x11;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 EA=1;
 ET0=1;
 ET1=1;
 TR0=1;
 TR1=1;
}

void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 t0++;
 if(flag!=1)
  {
  if(t0==10)
   {
    t0=1;
    temp=_crol_(temp,1);
    P1=temp;
   }
  }
 else
  {
   if(t0%4==0)
    P1=~P1;
   if(t0==60)
   {
    TR0=0;
    P1=0xff;
    flag1=1;
   }
  } 
}

void timer1() interrupt 3
{
 TH1=(65536-50000)/256;
 TL1=(65536-50000)%256;
 t1++;
 if(t1==2)
  {
   t1=0;
   shu--;
   bai=shu/100;
   shi=shu%100/10;
   ge=shu%10;
   if(shu==398)
    {
     TR0=0;
     TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     TR0=1;
     flag=1;
     t0=0;
     P1=0xff;
     TR1=0;
    } 
  } 
}

void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g)
{
        dula=1;
  P0=table[aa];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfe;
  wela=0;
  delay(1);

        dula=1;
  P0=table[bb];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfd;
  wela=0;
  delay(1);

       dula=1;
  P0=table[cc];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfb;
  wela=0;
  delay(1);
        dula=1;
  P0=table[ba];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xf7;
  wela=0;
  delay(1);

  dula=1;
  P0=table[sh];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xef;
  wela=0;
  delay(1);

  dula=1;
  P0=table[g];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xdf;
  wela=0;
  delay(1);
}

关键字:c51  中断  定时寄存器 引用地址:c51中断/定时寄存器的典型运用程序

上一篇:解决STM32 J-FLASH不能读RAM 下载的问题
下一篇:STM32初学笔记1之RCC(上)

推荐阅读最新更新时间:2024-03-16 15:14

STM32F4 EXTI外部中断(一)
STM32中共有23根中断总线 外部中断配置步骤 1.使能IO时钟,初始化IO为输入 详见 2.开启SYSCFG时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟 3.设置IO口与中断线映射关系 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); 参数1:端口组 EXTI_PortSourceGPIOA, EXTI_PortSourceGPIOB, EXTI_PortSourceGPIOC ~~~ 参数2:中断线:EXTI_PinSource0 ~ EXTI_
[单片机]
STM32F4 EXTI外部<font color='red'>中断</font>(一)
(二)stm32之中断配置
一、stm32的中断和异常   Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表。而stm32对这个表重新进行了编排,把编号从-3~6定义为系统异常,编号为负的内核异常不能设置优先级,从编号为7为外部中断,这些中断的优先级可自行进行设置。我们一般在starup_stm32f10x_hd.s中查找中断向量,而且在编写中断函数时也要在这个文件里查找中断服务函数的函数名。如下图所示: 二、NVIC中断控制器 1、stm32提供了强大的中断控制器NVIC,NVIC属于Cortex内核器件,不可屏蔽中断(NMI)和
[单片机]
(二)stm32之<font color='red'>中断</font>配置
GPS信号中断时惯导芯片的位置信息感知系统设计
引言 当今社会,GPS卫星定位系统早已广泛应用于人们的社会生活中,如交通工具导航、个人定位服务等。但在某些情况下,由于物体遮蔽、散射等原因,我们无法实时接收到GPS卫星信号(比如列车进入隧道)。所以有必要研究在GPS信息缺失的情况下,如何通过一定的算法产生模拟GPS信息,从而实现全天候的无缝位置感知。这在某些对位置信息敏感的场合中就显得非常急迫和重要。 1 惯导芯片简介 ADIS16003是ADI公司的一款低成本、低功耗,具有SPI接口的双轴加速度计,属MEMS传感器件。它可以测量动态和静态加速度并以数字量输出,测量范围最小可以达到±1.7 g,同时还集成了温度传感器,可用于惯性导航、振动检测和稳定性测试等场合中。 SPI
[嵌入式]
51单片机C语言程序100例分析(2)定时器+中断
#include reg51.h //包含 51 单片机寄存器定义的头文件 void main(void) { TMOD=0x01;// 使用定时器 T0 的模式 1 TH0=(65536-46083)/256; // 定时器 T0的高 8 位赋初值 TL0=(65536-46083)%256; // 定时器 T0的低 8 位赋初值 TR0=1; // 启动定时器 T0 TF0=0; //清定时器溢出标志位 P2=0xff; while(1)// 无限循环等待查询 { while(TF0==0); TF0=0; P2=~P2;//按位取反 TH0=(65536-46083)/256; /
[单片机]
AVR/Arduino定时/计数器、中断入门
在Arduino中,可以使用AnalogWrite来使用硬件产生490Hz/980Hz的pwm波,并可根据参数来设定占空比。不了解这个的同学可以去AnalogWrite学习下,SecretsOfArduinoPWM也是讲了Arduino在avr的定时/计数器上做的封装,我们这里并不讲Arduino相关,而是讲AVR的定时/计数器,如何产生更多PWM波和定时/计数器的中断使用。 AVR Timer/Counter(以下统称Timer) 以ATmega358p为例,其内部拥有一个16位计时器,两个8位计时器,下图则为16位计时器的大致图解: 对于没有接触过avr内部的Arduino同学来说,这张图看不出来任何意思,别急,这些都是AV
[单片机]
AVR/Arduino<font color='red'>定时</font>/计数器、<font color='red'>中断</font>入门
控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK
编译器内部函数__disable_irq、__enable_irq、__disable_fiq和__enable_fiq用于控制IRQ和FIQ中断。 只有当处理器处于特权模式才可以使用这些内部函数,因为这些函数要改变寄存器CPSR和SPSR(ARM7、ARM9等)或者PRIMASK和FAULTMASK寄存器(Cortex-M3、M4等),而这些寄存器只有在特权模式下才能被访问。 这些内部函数对所有架构的处理器都有效,无论是ARM状态还是Thumb状态,如下所述: 如果使用的是ARMv6(ARM11)或更新架构,编译器会将这些函数用CPS指令代替。 如果使用的是ARMv4或者ARMv5架构并且处于ARM状态,编译器会将这些函
[单片机]
基于STR7 ARM微控制器的IRQ中断防御体系
引言   ARM7TDMI体系的中断向量的地址是动态分配在中断向量控制器的寄存器中,例如,意法半导体(ST)公司生产的STR71x系列ARM微控制器,其增强型的中断控制器(EIC)的EIC_IVR寄存器(中断向量寄存器)、EIC_SIRn寄存器(源中断寄存器)都是用于存储相关中断通道的中断服务程序在存储器中的地址,内核响应IRQ中断后,再根据当前对应的中断通道的中断向量进行散转,执行相应的中断服务程序。对于一般的8位MCU,通常是将向量中断人口固定分配ROM中,例如MCS-51单片机各个中断的人口地址是固定的。两者相比,ARM的中断体系具有较大的灵活性,但却降低了安全性和可靠性;MCU的中断向量体系虽然失去了灵活性,但确保了系
[单片机]
基于STR7 ARM微控制器的IRQ<font color='red'>中断</font>防御体系
利用外部中断和时间中断计数0-999显示在数码管上
要求:数码管从0开始显示,按一次按键(和内部中断,每隔一秒就自然进入中断一次),进入一次中断,数码管上数字加1,直到999,又从0开始。 连线:P10连L7 电位器连直流电机 脉冲输出连P32 CS1连数码管CS #include reg51.h typedef unsigned char uchar; xdata uchar LED_CS _at_ 0x9000; xdata uchar LED_OUTSEG _at_ 0x9004; xdata uchar LED_OUTBIT _at_ 0x9002; sbit P10=P1^0; uchar n=0; unsigned int Count=0; code unsign
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved