16F690二进制LED时钟汇编程序实战与详解
5星 · 超过95%的资源 需积分: 10 39 浏览量
更新于2024-09-24
收藏 2KB TXT 举报
本文档主要介绍了一个针对Microchip PIC16F690单片机的二进制LED时钟汇编程序设计。该程序是为了解决在该型号的微控制器上实现一个实时显示时间的时钟应用。以下是关键知识点的详细解释:
1. **硬件配置**:
- 使用了PIC16F690单片机,它具有内部振荡器( Oscillator Configuration, OSCCON)和可编程定时器/计数器(Timer/Counter)。
- 振荡器被设置为250kHz,通过`bcf OSCCON, 6`指令调整了POSTSC(Postscaler)。
- 为了优化程序性能,选择了低功耗模式,并关闭了看门狗定时器(WDT)、电源管理(PWRTE)、空闲引脚使能(MCLRE)、晶振比较器(CP)、上电复位中断(IESO)、方波发生器(FCMEN)。
2. **定时器配置**:
- Timer0被配置为由处理器时钟源提供,通过`movlw b'00000111'`设置了最大预分频值到1:8,提高了精度。
- 激活全局中断(INTCON, 7)并设置Timer0中断请求线(RABIE),以便处理时间更新。
3. **GPIO初始化**:
- 清零PORTC寄存器,将PORTC设置为输出模式,以便驱动LED显示。
- 初始化数字输入输出(ANSEL)寄存器,用于控制LED连接的IO口功能。
4. **主程序流程**:
- 主循环开始于`loop`标签,首先将小时数`0aH`写入`count1`,然后调用`convert`函数转换十进制到二进制,再调用`sub_transmit`函数显示结果。
- 然后,设置一个50毫秒的延时,使用`delay50ms`子程序。
- `TMR0`作为定时器,计数满后会触发中断,程序通过`T0IF`标志判断这一事件。
5. **中断处理**:
- 当Timer0溢出时,程序进入`lp1`标签,检查`T0IF`标志,如果已溢出,则清除该标志、更新`TMR0B`寄存器,并继续执行下一个时间单位的显示。
6. **子函数**:
- `convert`函数用于将十进制数转换为二进制,具体实现未在提供的代码中给出。
- `sub_transmit`可能是用于发送二进制数据到LED的函数,也可能涉及到位操作或寄存器读写。
整个程序结构清晰,实现了基于定时器的实时二进制时钟功能,适用于教学、学习或小型嵌入式系统开发。通过阅读和理解这份代码,开发者可以了解到如何在PIC16F690上利用汇编语言进行基本的硬件配置、定时器管理以及GPIO操作。这对于想要深入学习和实践单片机编程的读者来说是一份有价值的学习资料。
2022-09-19 上传
2010-07-20 上传
2022-09-21 上传
2018-01-06 上传
2023-05-27 上传
2022-06-15 上传
2021-11-19 上传
2011-07-20 上传
2018-07-18 上传
lanying17081352353
- 粉丝: 2
- 资源: 2
最新资源
- AA4MM开源软件:多建模与模拟耦合工具介绍
- Swagger实时生成器的探索与应用
- Swagger UI:Trunkit API 文档生成与交互指南
- 粉红色留言表单网页模板,简洁美观的HTML模板下载
- OWIN中间件集成BioID OAuth 2.0客户端指南
- 响应式黑色博客CSS模板及前端源码介绍
- Eclipse下使用AVR Dragon调试Arduino Uno ATmega328P项目
- UrlPerf-开源:简明性能测试器
- ConEmuPack 190623:Windows下的Linux Terminator式分屏工具
- 安卓系统工具:易语言开发的卸载预装软件工具更新
- Node.js 示例库:概念证明、测试与演示
- Wi-Fi红外发射器:NodeMCU版Alexa控制与实时反馈
- 易语言实现高效大文件字符串替换方法
- MATLAB光学仿真分析:波的干涉现象深入研究
- stdError中间件:简化服务器错误处理的工具
- Ruby环境下的Dynamiq客户端使用指南