博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于pic16f883芯片的汇编秒闪LED实验
阅读量:6033 次
发布时间:2019-06-20

本文共 1166 字,大约阅读时间需要 3 分钟。

hot3.png

器材:Microchip公司的控制芯片pic16f883、LED灯、电阻、导线、程序下载器、代码编译仿真软件MPLABV8.8

【电路连接原理图】:

【软件流程图】

 

本实验使用TIMER1模块 16位计数器溢出检测来完成周期性延时0.5S。

【数据计算】

计算方法如下:

计数频率:4MHz * 1/4 * 1/8 = 1/8 MHz

则计数周期为:8uS

由于代码中设置每延迟0.5S,LED引脚电位取反来切换状态。所以要使计数器累计计数0.5S:

计数器次数= 0.5S/8uS = 62500次

TMR1是16为计数器,所以计数起始值设为65536-62500 = 3036 (0x0BDC)。这样子仿真LED闪烁周期为:1.000036 S

【微调&校准周期】

于是将计数起点调整为0x0BDF,并且在循环里加入6个NOP(之前测试执行一条命令的周期为1uS),LED闪烁周期准确的为1 S。

【可重定位汇编语言】

实现代码如下:

#include
UDATA_SHRCOUNTER1 RES 1COUNTER2 RES 1RESET_VECTOR CODE 0X0000NOPGOTO MAINMAINBANKSEL ANSEL ;设置PORTA为数字信号I/OCLRF ANSELBANKSEL TRISAMOVLW B'00000000' ;PORTA全设为输出MOVWF TRISABANKSEL T1CONMOVLW B'10110101' ;配置timer1 ,1:8预分频(时钟信号进入TIMER1时有一个1:4分频)MOVWF T1CONBANKSEL OSCCONMOVLW B'11101100' ;时钟4MMOVWF OSCCONDelay ;延时,等待时钟振荡器稳定INCFSZ COUNTER1,1GOTO DelayINCFSZ COUNTER2,1GOTO DelayBANKSEL PORTALOOPCOMF PORTA,1 ;PORTA I/O取反CALL LOOP1 ;计数器计数,延时GOTO LOOPLOOP1BANKSEL TMR1H ;TMR1设置计数初值MOVLW 0X0BMOVWF TMR1HBANKSEL TMR1LMOVLW 0XDFMOVWF TMR1LBANKSEL PIR1LOOP2 ;TMR1溢出检测BTFSS PIR1,0GOTO LOOP2BCF PIR1,0NOPNOPNOPNOPNOPNOPRETURNEND
来自HUST·EI seedclass2010 钟老师微机原理课实验,祝好! 

转载于:https://my.oschina.net/u/185037/blog/64386

你可能感兴趣的文章