16F690二进制LED时钟汇编程序实战与详解

5星 · 超过95%的资源 需积分: 10 11 下载量 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操作。这对于想要深入学习和实践单片机编程的读者来说是一份有价值的学习资料。