菜单 English Ukrainian 俄语 主页

面向爱好者和专业人士的免费技术图书馆 免费技术库


无线电电子与电气工程百科全书
免费图书馆 / 无线电电子和电气设备方案

PIC 单片机的初级程序员。 无线电电子电气工程百科全书

免费技术库

无线电电子与电气工程百科全书 / 业余无线电爱好者

文章评论 文章评论

[在执行此命令时出现的错误]

根据我自己开始学习单片机编程的经验,我将尝试给出一些关于用汇编程序编写程序的实用建议。 下面的所有编程示例均与中等 Microchip 系列的 Pic 控制器相关,由于其相对简单的架构和简单的汇编命令系统,最适合开始开发。

所提出的程序可以以现成的宏(完整的子程序)的形式使用,它们不依赖于特定的控制器,因此在应用时应考虑数据表中的数据。

1、定时器溢出中断TMR0(RTCC)的应用

我们以时钟频率 - Fclock 为例。 = 4,096 MHz(标准石英)。 那么循环时间将为 tc = 1 / Ftact。 * 4 = 0,97656 µs

INI_TMR; 从 RTCC 初始化中断模式
bsf 状态,RP0 ; 选择银行1
movlw b'00000100'
movwf 选项; RTCC 预分频器 1 : 32
bcf 状态,RP0 ; 银行0
movlw b'10100000'
movwf 内部控制; RTCC 中断使能
movlw .96 ; 将初始数字 96 加载到 RTCC 中
movwf TMR0

获取中断时间:
ti = tc * 32 * (256 - 96 = 160)
ti = 0,97656 * 32 * 160 = 5 µs = 000 ms

现在,如果你在任何程序中进入一个无限循环(即所谓的中断等待循环),并将程序的结束翻译为这个循环,我们将得到一个5毫秒的时间参考。中断之后,程序将返回到中断向量指示的地址(更常见的是 04h )。它可以用来做什么 - 见下文。

所以:

;
组织0
开始 ; 之后开始执行程序
; 打开
组织 04h ; 这是中断向量的地址,在该地址
主要的 ; 主程序将运行
;
开始 ; 这是强制初始化通常发生的地方。
INI_TMR; 端口、模式、寄存器等的集中化
INI_端口
循环
转到循环; 这是一个无限循环
;------------------------------------------------- -


; 接下来是主程序的主体,
; 其中需要从RTCC创建一个中断服务程序,
; 由CALL命令调用:

服务TMR
btfsc INTCON,RTIF; 检查 RTCC 中断触发标志并
调用 SET_TMR ; 如果是,则再次初始化TMR0
返回; 如果“否” - 返回 ServTMR 调用的位置
; 主程序
;
SET_TMR movlw .96
movwf TMR0; 再次加载数字 96
bcf INTCON,RTIF; 重置触发标志
雷菲; 返回并在 ServTMR 中启用中断,并且
; 然后进入主程序

使用 RTCC 中断在输出之一(例如端口 B - RB0)上接收第二个脉冲的示例:使用 Rsec 寄存器,该寄存器必须事先在工作寄存器的地址字段中声明。

因此,在端口 RB0 的输出处,信号电平每秒从“0”变为“1”。

在控制器的寄存器中,信息通常是二进制形式(二进制代码)。 但通常需要获取二进制 - 十进制形式(BCD - 代码)的信息,例如控制七位七段指示器。

让我们考虑一下二进制代码 b2 到二进制十进制 BCD 的转换示例,反之亦然。

在8位寄存器中,您可以用二进制代码写入0到255(从b'00000000'到b'11111111')之间的数字。 让我们将二进制数转换为三位二进制十进制代码——“百位”、“十位”和“个位”。 为此,我们将使用以下寄存器,这些寄存器必须提前在工作寄存器的地址字段中声明:

Rbin - 用于以二进制代码 b2 存储数字的寄存器
Rhan - 注册“数百”个 BCD 代码
Rdec - 注册 BCD 码的“十位”
Rsim - BCD码“一”寄存器

使用减去数字 100,然后减去 10 的操作来执行转换,计算正减法的数量。

FORM_1S; 在每个周期中,由于 RTCC 中断而持续
incf Rsec,w ; 5 ms,将 Rsec 寄存器加 1 至数字 200
xorlw .200 ; (5 毫秒 * 200 = 1 秒)
btfsc 状态,z
转到 OUT_PORT ; Rsec = 200 标志 z = '1' 并转换到控制
; B 端口引脚 RB0
返回; 返回主程序main
;
OUT_PORT btfss PORTB,0 ; 检查输出RB0的状态
转到 OUT_ON ; 如果 RB0 ='0',则设置为'1'
bcf PORTB,0 ; 否则 - 设置为“0”
转到主目录; 返回主程序
;
OUT_ON bsf PORTB,0 ; 设置 RB0 = '1'
转到主要

CON_100 movlw .100 ; 从 Rbin 中减去 100 并检查
subwf Rbin,w ; 结果不是负面的。 当标志 'c' = 1 时
btfss 状态,c ; 结果 > 或 = 0,当 < 0 时,'c' = 0
转到 CON_10
incf 拉恩,f ; 数着“数百”
movwf Rbin ; 减法的结果首先存储在寄存器中
转到 CON_100 ;电池,然后才返回 Rbin
; 以免因负数而丢失余数
; 减法结果。
CON_10 movlw .10 ; 类似地定义“十”
subwf Rbin,w
btfss 状态,c
转到 end_con
incf Rdec,f
movwf 鲁宾
转到CON_10;
结束con
movf Rbin,w
movwf Rsim ; 相减后,我们将余数输入“单位”
;继续程序执行

BCD 码反向转换为 b2。 我们使用相同的寄存器 Rhan、Rdec、Rsim,其中数字位于 BCD 代码中,寄存器 RbinH - 最高有效数字和 RbinL - b255 代码中数字 (> 2) 的最低有效数字,以及辅助寄存器 RM1 - “被乘数”,RM2 - “乘数”。要将 BCD 转换为 b2,您需要将“百”乘以 100,“十”乘以 10,并将所有内容与“单位”相加,并在必要时考虑转移到最高有效数字. 对于乘法,我们使用加法运算。

B2X_100 movlw .99 ; 转换“数百”
movwf RM2; 乘数 = 加法次数 (100) 减 XNUMX
movf 兰,w
movwf RM1 ; 被乘数=“百”
LoopX100 addwf RM1,w btfsc 状态,c ; 检查传输到最高位
incf RbinH,f ; 如果有转账
decfsz RM2,f ; 控制添加数量
转到循环X100
movwf RbinL ; 加法的结果输入到寄存器ml中。 释放
;
B2X_10 movlw .9 ; 转换“十”
movwf RM2; 乘数 = 加法次数 (10) 减 XNUMX
movf Rdec,w
movwf RM1 ; 被乘数=“十”
LoopX10 addwf RM1,w ; 这里的传输可以省略,因为结果
decfsz RM2,f ; 总是 < 255
转到循环X10
添加wf RbinL,f ; 添加“十”转换的结果
btfsc 状态,c ; 考虑到可能的数字传输
公司
RbinH,f
movf Rsim,w
addwf Rbin,f ; 添加“单位”,考虑到可能的转移
btfsc 状态,c
incf RbinH,f

改造结束并进一步实施该计划。 在寄存器RbinL和RbinH中接收到代码b16中的2位数字。

为了执行除法算术运算,与上面讨论的乘法类似,使用减法运算。 假设我们需要将寄存器 RHsum(较高位)和 RLsum(较低位)中的数字除以 Rdel 寄存器中的除数(我们取一个不大于 255 的除数)。

结果将输入寄存器 RHrez 和 RLrez(分别是高位和低位):

OP_DEL
movf Rdel,w
subwf Rlsum,w
btfss 状态,c ; 我们检查一下结果是否为阴性?
转到 DEF_carry ; 如果“是”,那么我们从艺术中贷款。 释放
incf RLrez,f ; 计算减法的次数,考虑到
btfsc 状态,c ; 可能调至高级职位
incf RHRez,f
movwf RLsum ; 恢复其余部分以免丢失
转到 OP_DEL ; 减法结果为负
;
DEF_进位
移动0h
xorwf RHsum,w ; 每个人都从高级晋升到初级吗?
btfsc 状态,z ; 如果“是”,即RHdel = 0 并在 OP_DEL 中取反
转到 OUT_DEL ; 猫。 结果 - 除法结束并退出
decf RHsum,f ; 如果“否” - 来自高级类别和亲的贷款
incf RLrez,f ; 我们必须继续
btfsc 状态,c ; 检查是否需要转至高级类别
incf RHRez,f
转到 OP_DEL

作者:Vladimir D.,degvv@mail.ru; 出版:cxem.net

查看其他文章 部分 业余无线电爱好者.

读和写 有帮助 对这篇文章的评论.

<< 返回

科技、新电子最新动态:

用于触摸仿真的人造革 15.04.2024

在现代科技世界,距离变得越来越普遍,保持联系和亲密感非常重要。萨尔大学的德国科学家最近在人造皮肤方面的进展代表了虚拟交互的新时代。萨尔大学的德国研究人员开发出了超薄膜,可以远距离传输触觉。这项尖端技术为虚拟通信提供了新的机会,特别是对于那些发现自己远离亲人的人来说。研究人员开发的超薄膜厚度仅为 50 微米,可以融入纺织品中并像第二层皮肤一样穿着。这些薄膜充当传感器,识别来自妈妈或爸爸的触觉信号,并充当将这些动作传递给婴儿的执行器。父母触摸织物会激活传感器,对压力做出反应并使超薄膜变形。这 ... >>

Petgugu全球猫砂 15.04.2024

照顾宠物通常是一项挑战,尤其是在保持房屋清洁方面。 Petgugu Global 初创公司推出了一种有趣的新解决方案,这将使猫主人的生活变得更轻松,并帮助他们保持家中干净整洁。初创公司 Petgugu Global 推出了一款独特的猫厕所,可以自动冲掉粪便,让你的家保持干净清新。这款创新设备配备了各种智能传感器,可以监控宠物的厕所活动并在使用后激活自动清洁。该设备连接到下水道系统,确保有效清除废物,无需业主干预。此外,该厕所还具有较大的可冲水存储容量,非常适合多猫家庭。 Petgugu 猫砂碗专为与水溶性猫砂一起使用而设计,并提供一系列附加功能 ... >>

体贴男人的魅力 14.04.2024

长期以来,女性更喜欢“坏男孩”的刻板印象一直很普遍。然而,英国莫纳什大学科学家最近进行的研究为这个问题提供了新的视角。他们研究了女性如何回应男性的情感责任和帮助他人的意愿。这项研究的结果可能会改变我们对男性对女性吸引力的理解。莫纳什大学科学家进行的一项研究得出了有关男性对女性吸引力的新发现。在实验中,女性看到了男性的照片,并附有关于他们在各种情况下的行为的简短故事,包括他们对遇到无家可归者的反应。一些人无视这名无家可归的人,而另一些人则帮助他,比如给他买食物。一项研究发现,与表现出同理心和善良的男性相比,表现出同理心和善良的男性对女性更具吸引力。 ... >>

来自档案馆的随机新闻

GeForce GTX 1650 薄型加速器 23.08.2019

华硕宣布推出两款新的 GeForce GTX 1650 系列图形加速器 - GTX1650-O4G-LP-BRK 和 GTX1650-4G-LP-BRK 解决方案。

显卡基于 NVIDIA Turing 架构。 GeForce GTX 1650 解决方案的主要特点是 896 个 CUDA 内核和 4 GB 的 GDDR5 内存以及 128 位总线(有效频率 - 8000 MHz)。 芯片核心的基频为1485 MHz,升压频率为1665 MHz。

两款华硕新产品均采用低调设计:高度仅为 41 毫米。 这允许加速器用于紧凑型计算机,例如家庭多媒体中心。

这些卡能够在游戏模式和 OC 模式下运行。 在 GTX1650-4G-LP-BRK 模型中,第一种情况下的基本和提升核心频率对应于参考值,在第二种情况下,它们增加到 1515 MHz 和 1695 MHz。

修改 GTX1650-O4G-LP-BRK 在游戏模式下以 1485/1710 MHz 的频率运行,在 OC 模式下 - 以 1515/1740 MHz 的频率运行。

加速器配备了带两个风扇的双槽冷却器。 后者根据 IP5X 标准防尘,从而提高了可靠性。

对于图像输出,提供了一个 DVI-D、HDMI 2.0b 和 DisplayPort 1.4 接口。 卡片尺寸 - 182 x 69 x 41 毫米。

其他有趣的新闻:

▪ 为什么男人不喜欢去看医生

▪ 谁比蚊子好吃

▪ DNA 链上的碳晶体管

▪ 吊坠将保护免受犯罪分子的侵害

▪ 世界上最大的芯片

科技、新电子资讯

 

免费技术图书馆的有趣材料:

▪ 该网站为那些喜欢旅行的人提供的部分 - 给游客的提示。 文章精选

▪ 孔子的文章。 名言警句

▪ 文章哪些无脊椎动物被认为是最聪明的? 详细解答

▪ 女主人的文章。 职位描述

▪ 赛璐珞瓶清漆。 简单的食谱和技巧

▪ 文章齐纳二极管作为镇流器。 无线电电子电气工程百科全书

留下您对本文的评论:

Имя:


电子邮件(可选):


点评:





本页所有语言

主页 | 图书馆 | 用品 | 网站地图 | 网站评论

www.diagram.com.ua

www.diagram.com.ua
2000-2024