九齐NY8B072A单片机使用笔记(二)TIMER1/2/3定时器

先上代码

volatile unsigned long g_timer0_delay_conut = 0;void main(void)
{DISI(); //Disable all unmasked interruptsNy8b072a_Gpio_Init();//Ny8b072a_Timer1_Init();//Ny8b072a_Timer2_Init();Ny8b072a_Timer3_Init();ENI(); // Enable all unmasked interrupts			while(1){//CLRWDT();	// Clear WatchDog/*LED1 = ~LED1;LED2 = ~LED2;LED3 = ~LED3;LED4 = ~LED4;*/App_Delay_Ms(1000);}
}//10bit count down , max 0x3FF
void Ny8b072a_Timer1_Init(void)
{//1MSTMRH = 0x30; // TIMER1 higt 2bit in TMRH bit4~5 msb TMR1 = 0xE8; // Load 0xFF to TMR1 (Initial Timer1 register) low 8bitT1CR1 = C_TMR1_Reload | C_TMR1_En;	// Enable Timer1, Initial value reloaded from TMR1, Non-stop mode T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div2;	// Enable Prescaler1, Prescaler1 dividing rate = 1:2// Timer1 clock source is instruction clockINTE |= C_INT_TMR1;	// Enable Timer1 overflow interrupt
}//10bit count down , max 0x3FF
void Ny8b072a_Timer2_Init(void)
{//500usTMRH = 0x40;		//TIMER2 higt 2bit in TMRH bit6~7 msb TMR2 = 0xF4;	// Load 0xFF to TMR2 (Initial Timer2 register) low 8bitT2CR1 = C_TMR2_Reload | C_TMR2_En;	// Enable Timer2, Initial value reloaded from TMR2, Non-stop mode T2CR2 = C_TMR2_ClkSrc_Inst | C_PS2_Div2;	// Enable Prescaler2, Prescaler2 dividing rate = 1:2// Timer2 clock source is instruction clockINTE |= C_INT_TMR2;	// Enable Timer2 overflow interrupt
}//10bit count down , max 0x3FF
void Ny8b072a_Timer3_Init(void)
{//50usTM3RH = 0;	//TIMER3 higt 2bit in TM3RH bit4~5 msb TMR3 = 50;	// Load 0xFF to TMR3 (Initial Timer3 register) low 8bitT3CR1 = C_TMR3_Reload | C_TMR3_En;	// Enable Timer3, Initial value reloaded from TMR3, Non-stop mode T3CR2 = C_TMR3_ClkSrc_Inst | C_PS3_Div2;	// Enable Prescaler3, Prescaler3 dividing rate = 1:2// Timer3 clock source is instruction clock//这里用 |= 会报错:如果其他中断讯号刚好在此时产生的话,使用 'BSR' 指令清除中断旗标有机会误清其他的中断旗标。 (201)INTE2 = C_INE_TMR3;	// Enable Timer3 overflow interrupt
}//! interrupt service routine
void isr(void) __interrupt(0)
{		if(INTFbits.T1IF){g_timer0_delay_conut ++;if(500 == g_timer0_delay_conut ) //1MS * 500 = 500ms{LED1 ^= 1;g_timer0_delay_conut= 0;}INTF= (unsigned char)~(C_INT_TMR1);	// Clear T1IF flag bit	}if(INTFbits.T2IF){ g_timer0_delay_conut ++;if(1000 == g_timer0_delay_conut ) //500us * 1000 = 500ms{LED1 ^= 1;g_timer0_delay_conut  = 0;}INTF= (unsigned char)~(C_INT_TMR2);	// Clear T2IF flag bit	}if(INTE2bits.T3IF){ g_timer0_delay_conut ++;if(10000 == g_timer0_delay_conut )//50us * 10000 = 500ms{LED1 ^= 1;g_timer0_delay_conut = 0;}INTE2= (unsigned char)~(C_INF_TMR3);	// Clear T3IF flag bit	}
}
时钟频率指令周期定时器分频TMRHTMR1中断计数IO翻转周期
8M4TC_PS1_Div205010 000500ms
8M4TC_PS1_Div405010 0001000ms

表中第一行,定时器1的时间计算如下:
8 000 000 / 4 / 2 = 1 000 000,1 / 1 000 000 = 1us;
定时器1的初值计数50需要50us,这就是定时器1每次进中断的时间;
中断里10000 == g_time0_delay_conut需要的时间为 50 * 10 000 = 500 000us = 500ms。

表中第二行,定时器1的分频为4,验证时间为2分频的一倍,说明时间计算正确。

个人不建议把定时器初值设置过低(1us),太频繁的中断容易引起意想不到的BUG,根据自己实际使用需求来设置一个合理的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新的Java缓存标准(javax.cache)

这篇文章探讨了新的Java缓存标准:javax.cache。 它如何适应Java生态系统 该标准由JSR107开发,作者是共同规范负责人。 JSR107包含在JSR342开发的Java EE 7中。 Java EE 7将于2012年底完成。但是与此同时,javax.cache将在Java SE 6和更高版本…

Eclipse搭建scala环境(解决“JDT weaving is currently disabled”问题)

随着Apache Spark,scala也成了必学的语言,下面讲一下Eclipse搭建scala开发环境。 网上有很多的教程,但是给的scala的地址下载的插件无法开发scala,会出现“JDT weaving is currently disabled”的问题,这是由于使用了错误的Scala地…

python如何输出结果_如何在python2.7中打印输出结果?

我正在存储一些数据,如温度,湿度和强度,这是我的Arduino输出和输入为我的python2.7,我正在绘制图表的数据。我也想将Arduino输出存储到文本文件中,但是我无法这样做: 这是我的python代码import serial impo…

python字符串连接的三种方法及其效率、适用场景详解

python字符串连接的方法,一般有以下三种:方法1:直接通过加号()操作符连接website& 39;python& 39;& 39;tab& 39;& 39; com& 39;方法2 python字符串连接的方法,一般有以下三种: 方法1:直接通过加号()操作符…

算法—递归实现 C(m,n)

/* 递归实现 C(m,n) */#include "stdio.h" int m,n,s,a[20];int main() {int c(int k);s0; a[0]0;scanf("%d%d",&m,&n);printf("\nC(%d,%d)%d\n",m,n,c(1));}//组合递归函数C(k) int c(int k) {int i,j;if(k<n){for(ia[k-1]1;i<m…

九齐51单片机使用注意事项:不要用float

在使用ADC计算电压值时用了float&#xff0c;NY8B072A堆栈直接炸了&#xff0c;用32机习惯了&#xff0c;一直想不通&#xff0c;查了手册才知道。 手册是&#xff1a;《NYC_NY8_UM_v1.5_SC.pdf》 链接&#xff1a;https://www.nyquest.com.tw/cn/support/download/Nyquest_SW…

有益的CountDownLatch和棘手的Java死锁

您是否曾经使用过java.util.concurrent.CountDownLatch &#xff1f; 这是在两个或多个线程之间实现同步的非常方便的类&#xff0c;在该类中&#xff0c;一个或多个线程可以等待&#xff0c;直到在其他线程中执行的一组操作完成为止&#xff08;请参阅javadoc和此文章 &#x…

算法—回溯法桥本分数式

/* 将1-9九个数不重复地赋给不同的9个元素 &#xff0c;实现形如a/bcd/eff/hi 的形式&#xff1a;例&#xff1a;1/265/784/39 1/325/967/84 &#xff08;注意&#xff1a;1/265/784/39 和5/781/264/39 只能算一种解&#xff09;求满足条件的解共有多少个&#xff1f; */ #in…

codeforces 703B

题意&#xff1a;有n座城市&#xff0c;其中k座是省会城市&#xff0c;每个城市有对应的点权&#xff0c;城市1-2-3-...-n-1有一条路相连&#xff0c;省会城市与其他所有的城市相连&#xff0c;且每两个城市间最多有一条路&#xff0c;每条路的边权为路连接的两座城市的点权乘积…

go 基准测试 找不到函数_基于Golang做测试

本文在实习期间完成并完善&#xff0c;无任何公司机密&#xff0c;仅做语言交流学习之用。持续更新。1.Golang的单元测试Go语言提供了丰富的单测功能。在Go中&#xff0c;我们通常认为函数是最小的可执行单元。本例中使用两个简单的函数&#xff1a;IsOdd和IsPalindrome来进行G…

九齐NY8B072A单片机使用笔记(三)模拟串口RX

因为这款单片机没有硬件串口&#xff0c;所以需要我们自己做软件模拟串口。 用PA3作为RX&#xff0c;因为PA3可以作为外部输入中断EXTI1。 本人首先用轮询的方式查PA3是否从高电平跳变到低电平&#xff08;起始信号&#xff09;&#xff0c;但是因为还有别的业务逻辑&#xf…

Java RESTful API集成测试

这篇文章将重点介绍为RESTful API&#xff08;带有JSON有效负载&#xff09;编写Java集成测试的基本原理和机制。 目的是对技术进行介绍&#xff0c;并为基本正确性编写一些测试。 这些示例将使用最新版本的GitHub REST API。 对于内部应用程序&#xff0c;这种测试通常将在持…

java警惕自增的陷阱

public class proposal{public static void main(String[] args) {int count0;for(int i0;i<10;i){countcount;}System.out.println(count);}}结果输出&#xff1a;0/*步骤一&#xff1a;JMV吧count值&#xff08;其值是0&#xff09;拷贝到临时变量区&#xff1b;步骤二:co…

[LindCode] Binary Tree Postorder Traversal

Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes values. Example Given binary tree {1,#,2,3}, 1\2/3return [3,2,1]. Challenge Can you do it without recursion? SOLUTION 1: recursion&#xff1a; 分治法解决之&am…

九齐NY8B072A单片机使用笔记(一)TIMER0定时器

先上代码 //8bit count up , max 0xFF void Ny8b072a_Timer0_Init(void) {PCON1 C_TMR0_Dis; // Disable Timer0//1 * (255 - 5) 250usTMR0 5; // Load 0x00 to TMR0 (Initial Timer0 register)//16M 2T Div8 1usT0MD C_PS0_TMR0 | C_PS0_Div8 ; // Prescaler0 is assign…

python菜鸟教程split_Python split()方法

网页地址解析&#xff1a; #codingutf-8 str"http://www.runoob.com/python/att-string-split.html" print("0:%s"%str.split("/")[-1]) print("1:%s"%str.split("/")[-2]) print("2:%s"%str.split("/"…

金山毒霸垃圾清理

金山毒霸-垃圾清理-单文件封装,清洁洁癖的爱好&#xff01; 实话&#xff0c;金山的软件确实不错。展望金山可以在软件行业&#xff0c;做出让世界都使用的。为国人扛起一片天 下载地址&#xff1a; http://pan.baidu.com/s/1dFa7GdV转载于:https://www.cnblogs.com/xiaochina/…

并发优化–减少锁粒度

在高负载多线程应用程序中&#xff0c;性能非常重要。 开发人员必须意识到并发问题才能获得更好的性能。 当我们需要并发时&#xff0c;我们通常拥有必须由两个或更多线程共享的资源。 在这种情况下&#xff0c;我们有一个竞争条件 &#xff0c;其中只有一个线程&#xff08;在…

Java1.5增加了新特性:可变参数

/*Java 可变参数Java1.5增加了新特性&#xff1a;可变参数&#xff1a;适用于参数个数不确定&#xff0c;类型确定的情况&#xff0c;java把可变参数当做数组处理。注意&#xff1a;可变参数必须位于最后一项。当可变参数个数多余一个时&#xff0c;必将有一个不是最后一项&…

C语言代码规范(十)花里胡哨代码鉴赏

一、宏定义篇 1、作者的目的是防止GPIO口赋值超过1。但是有明显自觉高人一等&#xff0c;瞧不起读者的感觉。 uint8_t not_func(uint8_t sw) {return (sw?1:0); }#define LED1(sw) PA12not_func(sw)修改建议&#xff1a; #define LED1 PA12 #define LED_ON 0 #de…