历史上的今天
今天是:2024年09月16日(星期一)
2020年09月16日 | 基于单片机内部定时器中断计数器设计
2020-09-16 来源:51hei
电源电路就是单片机的供电电路,一般是3.3V或者5V,具体多少要参考各种型号的单片机的工作电压,通常情况下是5V,这里是指通常情况下。
整体设计思路:
单片机中断初始化程序应完成du如下工作:
1、对TMOD赋值,以确定T0和T1的工作方式。
2、计算初值,并将其写入TH0、TL0或TH1、TL1。
3、中断方式时,则对IE赋值,开放中断。
4、使TR0或TR1置位,启动定时/计数器定时或计数。
整体设计思路
单片机的中断为向量中断,即一响应中断就转入固定入口地址执行中断服务程序。各中断源服务程序的入口地址
两个中断入口间只相隔8字节,难以安放一个完整的中断服务程序。因此,通常在中断入口地址处放置一条无条件转移指令,使程序执行转向中断服务程序入口。
定时器中断是由单片机中的定时器溢出而申请的中断。51单片机中有两个定时器T0和T1
有电路仿真原理图(10分);图中元件参数标注详细正确(10分);有操作过程说明(10分);有工作原理的文字描述(5分);对电路原理的描述全面(5分)。
1.电路仿真原理图:![OIZT1LJ8[5{3{FL{]$PSW[7.png?imageView2/2/w/550 OIZT1LJ8[5{3{FL{]$PSW[7.png?imageView2/2/w/550](https://8.eewimg.cn/news/uploadfile/2020/0916/1600217864709318.png?imageView2/2/w/550)
电路原理描述:
共阳型数码管字模:
{~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F }; //{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1, 0x86,0x8e};
//0,1,2,3,4,5,6,7,8,9
中断装置和中断处理程序统称为中断系统。
中断系统是计算机的重要组成部分。实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。中断系统的应用大大提高了计算机效率。
3.工作原理:
定时器/计数器初始化的一般步骤 51 单片机内部定时器/计数器是可编程序的,通过程序设置寄存器对它进行设定和控制,因此需要进行初始化操作。
(1)确定定时器/计数器的工作方式:
通过对 TMOD 中的方式选择位 M1 和 M0 赋值实现。
(2)预置定时或计数初值:
根据定时时间或计数次数,将计算的定时或计数初值写入 TH0、TL0 或 TH1、TL1。如预置 T0 初值指令。
(3)开放定时器/计数器的中断,设定中断优先级:
通过给 IE 寄存器中的相关位赋值来实现。
(4)启动定时器/计数器:
通过给 TCON 中的 TR1 或 TR0 置 1 实现。
5电路原理:
定时器/计数器的为自动恢复初值(初值自动装入)的 8 位定时器/计 数器。TLx(x = 0,1)作为常数缓冲器,当 TLx 计数溢出时,在溢出标志 TFx 置 “1”的同时,还自动将 THx 中的初值送至 TLx,使 TLx 从初值开始重新计数。 定时器/计数器的方式 2 工作过程如下图所示。该方式可省去用户软件中重装初
值的指令执行时间,简化定时初值的计算方法,可以相当精确地确定定时时间。
单片机源程序如下
#include #define LEDCHAR P1 //LED 字符I/O 口,P1.0~7对应A~DP #define LEDSELECT P0 //LED 选择I/O口. P0.0~5对应LED的1~6 unsigned char code uca_LEDCode[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0,1,2,3,4,5,6,7,8,9 unsigned char code uca_LEDSelect[]={0x01,0x02,0x04,0x08,0x10,0x20}; //分别点亮第6,5,4,3,2,1号灯. unsigned char uca_LedNum[6]; //存放数字的各个位 //* 函数实现 unsigned char * pucLedNum(unsigned long ulNumber) { if(ulNumber>999999) ulNumber=999999; if(ulNumber<0) ulNumber=0; uca_LedNum[0] = ulNumber/100000; //最高位 uca_LedNum[1] = (ulNumber-100000*(long)uca_LedNum[0])/10000; uca_LedNum[2] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1])/1000; uca_LedNum[3] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1] -1000*(long)uca_LedNum[2])/100; uca_LedNum[4] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1] -1000*(long)uca_LedNum[2]-100*(long)uca_LedNum[3])/10; uca_LedNum[5] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1] -1000*(long)uca_LedNum[2]-100*(long)uca_LedNum[3]-10*(long)uca_LedNum[4]); return uca_LedNum; } void vShowOneNum(unsigned char ucOneNum,unsigned char ucOrder) { LEDSELECT=0; LEDCHAR=uca_LEDCode[ucOneNum]; LEDSELECT=uca_LEDSelect[ucOrder]; //ucOrder:0~5(代表从左到右1~6) }
史海拾趣
|
指导老师太刻薄了~~论文改了又改还是过不了~~我都快急死~~我好声好气跟他说~~他说什么我的论文没达到标准 还说什么让我再读一年~~拜托好心人帮帮忙~~ 我的邮箱: 289651662@qq.com [ 本帖最后由 vbnm 于 2009-5-26 23:21 ...… 查看全部问答> |
|
error LNK2019: 无法解析的外部符号 SHGetPathFromIDListW, 我把VC6.0下的一个目录浏览程序在VS2005中打开后,移植到我的程序中!我开发的是wince下的程序,用VS2005开发!编译后出现链接错误:如下我错误信息!我已经把该包含的头文件都包含了啊!哪位知道请指教一下! 正在链接... CEView ...… 查看全部问答> |
|
最近做点小东西时用到了压箱底N久的一块屏(SED1335控制器,320×240单色),我将其挂在FSMC总线上,然后配置FSMC总线时用到如下子程序: =========================我是分割线========================= void FSMC_Configura ...… 查看全部问答> |
|
Stm32F429最突出的亮点应该就是自带LCD驱动器,看了一下官方例程stm32f429i_discovery_lcd.c里有关于液晶的操作,果然牛X,很多操作函数都没见过,比如有关层的函数和PolyLine函数,上网查了一下才发现其实这些函数st在之前的各种EVAL板子的例程中都 ...… 查看全部问答> |




