历史上的今天
今天是:2025年01月13日(星期一)
2020年01月13日 | STM8S003外部中断识别机械式编码器正反转
2020-01-13 来源:eefocus
最近在项目上,用到鼠标上用的编码器,按照厂家给的编程方法,发现容易产生误判,故而自己用外部中断的方式来做,发现这样误判的情况会得到很大的改善,现发上来与大家分享。
#include "stm8s103f3p.h"
#include "stm8s_bitsdefine.h"
#include "typedef.h"
#define CodeA PB_IDR_0
#define CodeB PB_IDR_1
uint8_t CodeB_last,CodeB_current,whe_ch,ADJ;
void UART1_Init(void)
{
UART1_CR2=0x00;
UART1_CR1=0x00;
UART1_CR3=0x00;
UART1_BRR2=0x00;
UART1_BRR1=0x0d;
UART1_CR2=0x2C;
}
void UART1_SendChar(uint8_t ch)
{
while((UART1_SR & 0x80) == 0x00);
UART1_DR = ch;
}
void IO_Init(void)
{
PB_DDR=0x04;
PB_CR1=0x07;
PB_CR2=0x01;
}
void EXTI1_INIT(void)
{
EXTI_CR1=0x08;
}
main()
{
IO_Init();
EXTI1_INIT();
UART1_Init();
_asm("rim");
while(1) ;
}
@far @interrupt void EXTI1_IRQHandler(void)
{
_asm("sim");
whe_ch++;
if(whe_ch==1)
{
CodeB_last=CodeB;
IO_Init();
EXTI_CR1=0x04;
}
if(whe_ch==2)
{
whe_ch=0;
CodeB_current=CodeB;
IO_Init();
EXTI_CR1=0x08;
}
if((CodeB_last==1)&&(CodeB_current==0))
{
ADJ++;
UART1_SendChar(ADJ);
}
if((CodeB_last==0)&&(CodeB_current==1))
{
ADJ--;
UART1_SendChar(ADJ);
}
_asm("rim");
return;
}
史海拾趣
|
在MCS-51 单片机的内部虽已集成了很多资源,但这类单片机属于一种“通用”的单片机,单片机内部的各种资源都是折衷配置的,如片内程序存储器、数据存储器的容量都不打,并行I/O端口的数量也不很多,此外,在有些应用中,片内定时器、中断、串行口等 ...… 查看全部问答> |
|
最近正在学习wince下搭建WEB服务器。 我在网上找到一个wince下的FTP服务器,运行之后,直接在PC的IE地址栏输入FTP://192.168.1.104就可以访问里面的文件了。 我现在就想在wince下搭建一个类似的WEB服务器,通过IE来访问wince设备的数据,控制设备 ...… 查看全部问答> |
|
请高手帮我分析一下:我的用是123的片子,做的是一个RF数据采集器,在零下30-40度做测试的时候,发现接受到的数据不正确.但是同一个仪器,拿到室温的时候又正常了.是不是可以分析为晶振工作不稳引起的.那么怎样才能要它在零下30-40度更加的稳定点?希望得 ...… 查看全部问答> |
|
lm3s811到底要怎么写程序啊!!要什么.h文件,怎么初始化!我真心蛋疼了 lm3s811到底要怎么写程序啊!!要什么.h文件,怎么初始化!我真心蛋疼了 整了一晚上加一天,一个程序都没运行成功! 求指教! 求批评! 求鞭策!… 查看全部问答> |
|
各位大侠,请教个A/D转换的问题: 我现在用PIC18F65J10做A/D转换,是10位的,VREF+,VREF-用的是VCC和地,信号用运放放大后输入,可是经采样后的数据隔几次就会出现一个00,我又把VREF-换成外部输入1V,输出值有隔几次出现一个4B(1V的采样值),这 ...… 查看全部问答> |
|
是的。 晚上和同事加了会班,由同事发现一个寄存器中我没有显示禁止流控,因此搞出了查了一两天的串口问题。 过后,他对我位操作的方式相当不满意。这期间有过一场小小的争论。 不过说起来,我已经对位操作或者不位操作 这件事情本身已经没有什 ...… 查看全部问答> |
|
keil编译时出现uncalled segment ignored for overlay process 程序如下,在鼠标头文件驱动里面,大家帮忙看下哪出问题了 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_MOUSE_SEND_DATA?MAIN **********************主函数************************** #inc ...… 查看全部问答> |




