📄 main.c
字号:
//本程序针对引导码:9ms低->4.5ms高
//连发码:9ms低->2.25ms高
//0:0.565低->0.56高
//1:0.565低->1.125高
//数据位为32位,即4个字节
//的编码遥控器使用
//控制器芯片:NEC公司芯片6122/6121
//使用ARM资源:1个外部中断(本程序中使用EINT2),1个定时器,不用开中断(本程序中使用定时器1)
//通过串口发送解码后的数据,波特率:115200
//2007年5月6号
#include "config.h"
#include "irquart0.h"
uint32 Reddata;
uint8 KeyDown;
uint8 Redinfo;
void main(void)
{
UARTMODE set;
set.datab = 8;
set.stopb = 1;
set.parity = 0;
rcv_new = 0;
PINSEL0 |= 0x05; //设置IO连接到UART0
PINSEL0=(PINSEL0&(~(3<<14)))|(3<<14);
UART0_Init(115200,set);
//U0FCR = 0x81; //接收器触发点为8个字符
U0FCR = 0x01; //接收器触发点为1个字符
U0IER = 0x01; //接收中断开,发送中断关
//串口0中断设置
VICVectCntl0 = 0x20|0x06;
VICVectAddr0 = (uint32)IRQ_UART0;
VICIntEnable = 1<<0x06;
/* 外部中断2初始化 */
VICVectCntl5 = 0x20 | 16; // 分配外部中断0到向量中断0
VICVectAddr5 = (uint32)IRQ_Eint2; // 设置中断服务程序地址
VICIntEnable = 1 << 16; // 使能EINT2中断
//EXTWAKE = 0x01; // 外部中断0唤醒芯片
EXTINT = 0x0f; // 清除EINT所有中断标志
EXTMODE = 0x04; // EINT2为下降沿中断
//定时器1中断设置
//T1TC = 0;
T1PR = 0;
T1MCR = 0x00; //禁止定时器1所有相关中断
//T1MR0 = Fpclk/1580; //中断时间设置 中断时间设置为600ms
T1PR = Fpclk/100000; //预分频寄存器定时时间为0.01ms
T1TCR = 0x00; //定时器计数器禁止计数
//定时器1中断设置
//VICVectCntl1 = 0x20|0x05;
//VICVectAddr1 = (uint32)IRQ_Timer1;
//VICIntEnable = 1<<0x05;
VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断
KeyDown=0;
UART0_SendByte('K');
while(1)
{
if(KeyDown == 1)
{
Redinfo = Reddata; //用户码
UART0_SendByte(Redinfo);
Reddata>>=8;
Redinfo = Reddata; //用户反码
UART0_SendByte(Redinfo);
Reddata>>=8;
Redinfo = Reddata; //键值数据字节
UART0_SendByte(Redinfo);
Reddata>>=8;
Redinfo = Reddata; //键值数据反字节
UART0_SendByte(Redinfo);
KeyDown=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -