void HR202_TMR2_ISR(void)//100us定时器中断调用函数 { if(HR202_Step == 0x00) { if(HR202_Flag == 0x00) { HR202_CONTR1_OUT;// HR202_CONTR2_OUT;// HR202_Flag = 0x10;// } else if(HR202_Flag == 0x10) { //PWM输出 if(PwmTimeCnt > 0) { PwmTimeCnt--; } else { PwmTimeCnt = 9; } if(PwmTimeCnt>=5)//1Khz 方波 { HR202_CONTR1_SET;//Rh 1 HR202_CONTR2_CLR;//Rf 0 } else { HR202_CONTR1_CLR;//Rh 0 HR202_CONTR2_SET;//Rf 1 } if(PwmTimeCnt == 2)//在Rh 为高电平时的200us 进行AD采集 { if(HR202_ADCTbl.AIEnable == OS_TRUE)//是否可以采集 { HR202_ADCTbl.AITbl[HR202_ADCTbl.AICnt++] = HR202Dect_GetADValue();//采集当前AD值 if(HR202_ADCTbl.AICnt == 10) { HR202_ADCTbl.AIEnable = OS_FALSE; HR202_ADCTbl.AICnt = 0; } } } } } }
时间: 2024-02-14 11:27:46 浏览: 28
这段代码是一个定时器中断函数,每隔100微秒执行一次。在函数中有一些条件判断和操作:
- 如果HR202_Step等于0x00,并且HR202_Flag等于0x00,会执行一些操作,并将HR202_Flag设置为0x10。
- 如果HR202_Step等于0x00,并且HR202_Flag等于0x10,会进行PWM输出的操作。
- 在PWM输出的过程中,会根据PwmTimeCnt的值,控制HR202_CONTR1和HR202_CONTR2引脚的电平。如果PwmTimeCnt大于等于5,将HR202_CONTR1设置为高电平,HR202_CONTR2设置为低电平;否则,将HR202_CONTR1设置为低电平,HR202_CONTR2设置为高电平。
- 当PwmTimeCnt等于2时,会进行AD采集的操作。如果HR202_ADCTbl.AIEnable为OS_TRUE,表示可以进行采集,就会调用HR202Dect_GetADValue()函数获取当前的AD值,并将其存入HR202_ADCTbl.AITbl数组中。当HR202_ADCTbl.AICnt等于10时,表示已经采集了10个AD值,将HR202_ADCTbl.AIEnable设置为OS_FALSE,表示不再允许采集,并将HR202_ADCTbl.AICnt重置为0。
这段代码主要是用来控制HR202传感器的操作,并进行PWM输出和AD采集。
相关问题
void timer_isr(void) __interrupt(1) { unsigned char TMR0IF = 0; //清除定时器中断标志位 unsigned char timerCount++; if(timerCount >= BREATH_TIME) { timerFlag = 1; } }怎么修改
可以将 unsigned char timerCount++; 修改为 timerCount++;,因为在函数中已经定义了 timerCount 的类型为 unsigned char,无需再次声明。另外,可以将 if(timerCount >= BREATH_TIME) 修改为 if(timerCount >= BREATH_TIME),使其符合命名规范。修改后的代码如下:
```
void timer_isr(void) __interrupt(1) {
TMR0IF = 0; //清除定时器中断标志位
timerCount++;
if(timerCount >= BREATH_TIME) {
timerFlag = 1;
}
}
```
void pwm_init() { PWM_PORT = 0x00; // 初始化PWM端口 T16M = 1; // 启动16M晶振 CLK_DIV = 0x00; // 不分频 TMR3RH = 0x0A; // 自动重装初值高字节 TMR3RL = 0x00; // 自动重装初值低字节 TMR3ON = 1; // 启动定时器 P3M1 |= 0x01; // P3.0设置为PWM输出 P3M2 |= 0x01; // P3.0设置为PWM输出 pwmValue = 0; }我使用的是NYIDE编译器需要怎么定义
在使用NYIDE编译器时,需要先定义PWM_PORT、T16M、CLK_DIV、TMR3RH、TMR3RL、TMR3ON、P3M1、P3M2、pwmValue这些变量或寄存器的地址。可以使用以下方式进行定义:
```c
#define PWM_PORT P3
#define T16M AUXR |= 0x80
#define CLK_DIV T3L |= 0xF8
#define TMR3RH RCAP3H
#define TMR3RL RCAP3L
#define TMR3ON TR3 = 1
#define P3M1 P3M1
#define P3M2 P3M2
unsigned char pwmValue;
```
需要根据具体的硬件电路和使用需求进行相应的修改。同时,还需要在代码中包含头文件、声明函数等操作。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)