本帖最后由 jamesyuen 于 2022-3-31 13:59 编辑
写了个demo代码,各位高手指点一下
#include"stdint.h"
#include<KF8F2320.h>
#define UARTOUT P0LR5
#define CompareEnable() C1IF = 0;C1IE = 1;C1EN = 1;
#define DELAY_40US() _NOP();_NOP();_NOP();_NOP();_NOP();
volatile uint8_t gu8test = 0;
/*
* 延时
*/
void Delay_120us()
{
DELAY_40US();
DELAY_40US();
DELAY_40US();
}
/*
* 延时1mS
*/
void Delay_1ms()
{
uint8_t i;
for(i=0;i<5;i++)
{
DELAY_40US();
DELAY_40US();
DELAY_40US();
DELAY_40US();
}
}
/*
* 延时NmS
*/
void Delay_ms(uint16_t _time_)
{
uint16_t i;
for(i=0;i<_time_;i++)
{
Delay_1ms();
}
}
/*
* IO初始化
*/
void IO_Init()
{
TR02 = 0;//未使用引脚
TR03 = 0;//未使用引脚
TR1 = 0;//未使用引脚
TR12 = 1;//
TR01 = 0;//
TR04 = 0;//
TR05 = 0;//
}
/*
* 比较器初始化
*/
void CMP1_Init()
{
TR00 = 1;//比较器1的正向输入端——P00配置为输入模式
ANS0 = 1;//打开P00的模拟通道
VREEN = 1;//使能内部参考电压
CM1CTL0 = 0x32;//比较器1的负端输入选择内部参考电压、不输出到引脚、反相、比较器禁止
}
/*
* MCU初始化
*/
void SysInitialize()
{
OSCCTL = 0x30; //设置为500K
IO_Init();
CMP1_Init();
PUIE = 1;
AIE = 1; //总中断
}
/*
* 中断处理
*/
void int_fun() __interrupt (0)
{
// 比较器中断
if(C1IF)
{
C1IF = 0;
C1IE = 0; //关键的这句,不知道是不是不起作用,一直IO翻转输出
//C1EN = 0; //这句同C1IE也一样
gu8test = 1;
}
}
/*
* 主函数
*/
void main()
{
SysInitialize();
UARTOUT = 0;
Delay_ms(3000);
CompareEnable();
while(1)
{
if(gu8test)
{
gu8test = 0;
//C1IE = 0; //这句打开,再把中断中这句注释,就不会一直IO翻转输出
//C1EN = 0; //这句同C1IE一样现象
UARTOUT = 1;
Delay_ms(500);
UARTOUT = 0;
Delay_ms(500);
C1IE = 1;
C1EN = 1;
}
}
}
|