导航:首页 > 操作系统 > 单片机comp

单片机comp

发布时间:2022-11-19 04:04:36

单片机程序注释(大致注释)

ORG 00H
MOV R5,#00H
MOV R7,#00H
DJNZ R7,$
MOV R7,#10H
MOV R6,#06H
MOV R1,#35H
L1: MOV A,R7
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV @R1,A
DEC R1
INC R7
DJNZ R6,L1
START: ORL P2,#0FFH
MOV R4,#06H
MOV R0,#40H
CLEAR: MOV @R0,#00H
INC R0
DJNZ R4,CLEAR
L2: MOV R3,#0F7H
MOV R1,#00H
L3: MOV A,R3
MOV P1,A
MOV A,P1
MOV R4,A
SETB C
MOV R5,#04H
L4: RLC A
JNC KEYIN
INC R1
DJNZ R5,L4
CALL DISP
MOV A,R3
SETB C
RRC A
MOV R3,A
JC L3
JMP L2
KEYIN: MOV A,R1
XRL A,#0BH
JZ X3
MOV A,R1
XRL A,#0FH
JZ X4
MOV R7,#10
D1: MOV R6,#24
DJNZ R6,$
DJNZ R7,D1
D2: MOV A,P1
XRL A,R4
JZ D2
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R7,A
XRL A,#0AH
JZ SET0
MOV A,R7
XRL A,#0BH
JZ START
MOV A,R7
XRL A,#0CH
JZ L2
MOV A,R7
XRL A,#0DH
JZ L2
MOV A,R7
XCH A,40H
XCH A,41H
XCH A,42H
XCH A,43H
XCH A,44H
XCH A,45H
CALL DISP
JMP L2
X3: JMP DISP2
X4: JMP COMP
DISP:MOV R0,#45H
DISP1: MOV A,@R0
ADD A,#50H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#40H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#30H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#20H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#10H
MOV P0,A
CALL DELAY
DEC R0
MOV A,@R0
ADD A,#00H
MOV P0,A
CALL DELAY
RET
SET0: MOV R2,#06H
MOV R0,#40H
MOV R1,#30H
E1: MOV A,@R0
XCH A,@R1
INC R0
INC R1
DJNZ R2,E1
CALL DELAY
E2: JMP START
COMP: MOV R1,#45H
MOV R0,#35H
MOV R2,#06H
C1: MOV A,@R1
XRL A,@R0
JNZ C3
DEC R1
DEC R0
DJNZ R2,C1
CLR P2.0
MOV R2,#200
C2: MOV R6,#248
DJNZ R6,$
DJNZ R2,C2
C3: INC R5
MOV A,R5
MOV R5,A
CJNE R5 ,#03H,C4
CLR P2.1
MOV R5,#00H
C4: JMP START
DISP2: MOV R0,#35H
CALL DISP
MOV A,P1
XRL A,R4
JZ DISP2
CALL DELAY
JMP START
DELAY: MOV R7,#C3
D3: MOV R6,#248
DJNZ R7,D3
RET
ORG 300H
TABLE: DB 01H 02H 03H 0CH
DB 04H 05H 06H 0DH
DB 07H 08H 09H 0EH
DB 0AH 00H 0BH 0FH
DB 01H 02H 03H 04H05H 06H
END

㈡ IAR单片机编程软件,在给AVR单片机编程时,#pragma vector=TIMER0_COMP_vect,这个vector的值怎么确定的

所有的中断向量都在 芯片的头文件中声明或定义,如果你用的是MEGA16,那么到MEGA16.H中找,而不是在IO.H中找。

㈢ 单片机实验Comp_B模块实验中为什么要关闭p6.6的输入缓冲

电容里面的残留电量,LED会逐渐灭掉的
前提是你把开发板的电源彻底断开还有和电脑的接口也要断开,LED灯还会亮
如果没有彻底断开电源,和电脑的线依然连接的话,有以下可能:
1- 电脑端的接口隔离做得不好,有漏电过来,点亮LED
2- 电源的回路没有被物理切断,有可能是控制器件出现漏电造成

㈣ 单片机控制继电器定时开关的程序流程

板设计的定时开关控制器具有简单易制、价格低廉、控制点数多、控制时间可精确到秒等特点:
1.主板电路部分
本电路主要是利用单片机AT89C2051(-24PI)作为主控制元件,通过外围电路控制用电设备的电源,以达到定时开、关机的目的。AT89C2051具有体积小、功能强大、运行速度快、价格低廉等优点,非常适合制作集成度较高的控制电路。图1为主电路原理图,图2为按其制作的主板(双面)大小只有95mm×70mm的器件位置图。主板电路包括MCUAT89C2051、键盘与显示、输入与输出口、复位和电源滤波等电路组成。
(1)键盘与显示显示电路由U2、U3、Q1~Q7和L1A、L2A组成。U2为BCD-7段译码器(74LS47),通过单片机U1的P1.4~P1.7口将要显示字符的BCD码输出到U2的四个输入端,经U2译码后输出相应的笔段驱动LED数码管(共阳)。LED数码管显示采用动态扫描方式,即在某一时刻,只有一个数码管被点亮。数码管的位选信号由单片机U1的P3.3~P3.5输出,经U3(74HC138)译码后通过Q1~Q6放大,驱动相应的数码管。R17~R24为限流电阻。
由于U2只能输出7段笔段码,而数码管除了七段笔段外,还要控制点亮小数点,因此,小数点必须有另外的驱动电路来完成,在这里,通过Q7来驱动小数点。当需要点亮小数点时,在U1的P1.3输出高电平即可。
键盘电路跟显示电路一样,采用扫描方式,利用动态显示时的数码管驱动位置信号来判断相应按键的状态。U1的P3.3~P3.5口输出的BCD码经U3译码后,相应Y口呈低电平,而U1的P3.7口平时为高电平(由于R8上拉),当某一键按下时,P3.7被下拉为低电平,这时MCU利用程序查询P3.7是否为低电平,如果P3.7为低电平,就读回U1P3.3~P3.5口的值(从缓冲区读取),则可判断是哪个按键按下,然后调用相应的处理程序进行处理。
(2)控制输出、复位与电源滤波电路MCU对控制的输出是通过P3.0~P3.2口完成的。程序开始时这三个口的输出状态是低电平,MCU通过程序查询三路输出的ON或OFF状态预置时间是否已到,如果已到时间,则改变相应的输出状态,就完成了对外部电路的控制。复位电路如图1左上角所示,C3和R25完成上电复位,S6为手动复位,按键输入干扰和抖动的预防是由软件完成的。+5V电源由JP2输入,经C4~C9滤波后给U1和其它器件供电。
2.电源与控制电路
电源及控制电路。其中,市电经总开关K后由B降压、V1整流、C11~C14滤波、U4、U5稳压后给主板和控制电路板提供稳定的工作电源;主板送过来的三路控制信号通过Q12~Q14分别控制继电器J1、J2、J3,对外部电路实施直接控制。继电器这里没有给出具体型号,您可根据耐压及通流大小选用相应的继电器,如在大电流和强电磁场干扰的环境里工作,最好利用中间继电器来间接控制。
3.程序软件工作过程
(1)秒脉冲发生器秒脉冲发生器是由定时器T0和内存空间TT0配合完成的。T0工作于16位计数器模式,当T0向上计数由全1变为全0时产生中断,本程序中T0的初值为0DC00H,大约0.01s中断一次。这里使用的晶振频率为11.0592MHz,由此可计算出日误差约为0.78s。
图4为程序流程图。系统产生中断后,首先保存ACC和PSW的值,然后为T0重装初值,判断中断次数是否小于100,是则转出中断服务,反之则为秒计数器加1,秒计数器如果大于59,则为分计数器加1,同时秒计数器清0。同样分计数器如大于59则为时计数器加1,同时分计数器清0,时计数器如大于23则清0并转出中断服务。T0中断100次的时间刚好为1秒钟。
(2)主程序上电复位过程:首先P0~P2口全部置1,P3口高5位置1,低3位置0。设置定时器T0工作于16位计数器模式,并赋初值TH0=0DCH,TL0=00H,关闭外部中断和串行口中断,时间计数器TS、TM、TH清0,所有预置时间存储区全部赋值FFH,至此所有初始化工作完成。
主程序工作过程:首先循环进行六个数码管扫描显示(DISPLY段),然后比较所有预置时间(COMP段)是否与当前时间相等,如相等则转向相应处理程序。在比较完成(或处理完成)后判断有无按键(PP2段),没有则返回继续显示、比较、判断;有按键则转向相应处理程序。按键转移采用偏移量加表格跳转转移法(KEY段),简单、明了。预置时间比较则采用逐一比较法,即对每一个预置值进行比较,如相等则做相应处理。具体比较时(COMP1段)先比较TH值,如不相等则直接转出并置“时间到”标志CCB为0,如TH、TM、TS全部对应相等,则置该标志为1。
本程序在显示及按键处理(设置过程)中巧妙使用R1寄存器作为公用地址寄存工具,对实时时间和预置时间的显示和修改调用同一程序完成,使源代码长度大大缩短,提高了程序的可读性和运行效率。在本刊的网站(www.eleworld.com)上给出了源程序,供读者参考。
4.制作与调试
(1)主板的制作与调试主板的制作稍微复杂一点。首先是制作印刷板,利用Protel99按照本文所示器件位置图放置好元器件,然后手动布线(双面),线宽为0.8mm左右,太宽做出的板子太大,太窄无法进行自制。绘好印制板图后转成BMP格式利用电脑刻字机镂空(要用进口的即时贴纸,不然容易断开),贴在双面敷铜板上,就可以用FeCl3腐蚀了。具体的制作方法这里不再赘述,但最好在印制板布线时做个阻焊层,同时在即时贴上刻出来,当板子制好清洗干净后敷在上面,用浅绿色油漆或清漆喷上薄薄的一层,好看又防腐蚀。
(2)元器件的选择如果按照本文所附器件位置图布线的话,数码管需选用图示型号才能安装(5361BH,一拖三数码管),选用不同型号数码管时可能需修改器件位置参数,然后再布线即可;晶振为11.0592MHz;S1~S5选用黑色小型轻触开关,S6则用红色同类型开关;变压器B选用15V、10W左右即可,V1硅堆应与B配合选用;控制继电器根据需要选用适合的型号,如5、12、24V等,如果选用5V的,相应的B、V1可选小一点的,7812则不要。如选用24V的,那么B、V1、7812、7805都需同时根据实际情况来选用;交流220V输出插座没有特殊要求,其耐压和通流符合受控器件要求即可。其它元器件选用通用的就行。
(3)焊接元器件元器件购回后应先进行预处理(引脚打磨、上焊锡),然后逐一焊接。在焊接MCU(当然2051要烧好程序后才能焊接)和其它集成电路时应使用有良好接地的烙铁(断电焊接也可),以免被击穿。由于双面印刷板存在一个穿孔问题,器件引脚穿过后,两面都要点上焊锡;如只是过孔,可用细铜线穿过并在两面焊接后剪掉即可。
在印刷板制作良好,连线没有不应有的开路或短路,且焊接没有虚焊的情况下,不用调试即可正常工作(本程序已制作成品并调试通过,不需再行调试)。如果您觉得自己制作的印刷板不够漂亮或太麻烦可联络凯思迪邮购(焊接好的整板也有),本刊网站有与凯思迪公司网站的链接。
(4)电源与控制板的制作可以将电源与控制板做在同一个板子上,也可分开制作,视所使用的情况而定,但JP1与JZ1之间的连线不宜太长。印刷板的制作同前所述,要注意的是在布线时对220V市电进入和输出(包括中线)的线宽设计要宽一点(根据工作电流大小来定为好),还要注意市电与直流电源的隔离,以免在使用中造成触电事故。
5.操作使用
本系统在加电后数码管显示“00.00.00”,输出继电器均不动作,此时可直接按S1、S2、S3键分别对时、分、秒进行调整,使当前时间与北京时间相符,时间设置过程中将停止计时,在设置好后按S4退出,时钟即进入正常计时。如果要设置输出控制的预置时间则先按S5,数码管显示“95.95.95”,此时可再按S1、S2、S3键分别对第一路输出状态ON的时、分、秒进行设置,设好后再按一次S5键,数码管也显示“95.95.95”,然后按S1、S2、S3键则分别对第一路输出状态OFF的时、分、秒进行设置,依此类推,按第七次时退出设定。任一路任一状态被执行后其预置值即被清除,24小时后并不有效,如果需要每天循环执行则对程序进行简单的修改即可(预置值不清除就可)。
6.改进与扩展
本文所述的AT89C2051在控制输出时只使用了P3.0~P3.2三个口,所以只能控制三路六个状态,如果把不用的P1.0~P1.2三个口用起来,则可控制六路十二个状态,外围电路相应增加三路继电器,程序软件只需稍事修改即可。当然如果需要控制更多路输出状态,那么在使用锁存器、译码器、触发器等后最多可以扩展到控制26=64路128个状态。在对控制输出的路数要求不多,而显示部分需要比较多的情况下,如还要显示年月日、农历、星期等,只要对其进行扩展就可实现:P1.4~P1.7不动,选通端用两个138,输出口用P3.2~P3.5就有24=16个数码显示。这时仍然利用上述方法最多可扩展到控制25=32路64个状态。当然年月日、农历、星期的计算(如大月小月、闰年、闰月等)分别汇编相应的子程序插入即可

㈤ 单片机原理 ACC.7 是什么意思程序如下

MOV A,VAR // 将 VER存到A
J Z COMP // 如果A=0,则跳转到COMP
JNB ACC.7,POSI // 如果ACC.7 = 0,则转移到POSI,ACC.7 就是A的最高位,这个是符号位,ACC.7 = 1 的话表明A的值是负数。如果ACC.7 不为0,并且前面JZ一句已经判断出A不等于0了,所以A就只能大于0了。

有不明白继续讨论。

㈥ 单片机答案编程求16位补码对应原码

MOV A,comp+1

CLR C
MOV B,#1
SUBB A,B
CPL A
MOV comp+1,A

MOV B,#0
MOV A,COMP
SUBB A,B
CPL A
MOV COMP,A
源码变补码,取反加一
补码变源码,减一取反
这是汇编的,不知到你要会变还是c的,总之满意的话赞一个!

㈦ 单片机comp字母各代表什么

指的是单片机内部的比较器。
采用内部带模拟比较器的单片机加上少量的外国元件,并在程序上稍作处理,就能够构成一种新的A/D转换器,该方法可节约因扩展A/D而占用的大量I/O,而且这种A/D转换器能达到很高的分辩率和精度,并且有抗干扰能力强、分辩率可由程序调整的特点,从而增加了单片机的应用范围和使用灵活性,同时就应用系统的设计也显得简洁和不效。

㈧ 单片机 两个有符号数分别在50H和51H里面,比较他们的大小,最后把大的放入60H单元。

;比较有符号数的大小,可以先进行一次相减,
;再根据差的正负、是否溢出,来区分大小。
;程序如下:
;

ORG
0000H

MOV
50H,
#-28
;先随便存入两个数字.

MOV
51H,
#108
;========================================
BIJIAO:
;开始比较.

MOV
A,
50H

CLR
C

SUBB
A,
51H
;(50H)-(51H)

JZ
DA_50H
;差为0转移.

JB
ACC.7,
FU
;负数转移.

JB
OV,
DA_51H
;有溢出转移.

SJMP
DA_50H
;正数且无溢出,转到(50H)大.
;----------------------------------------
FU:
JB
OV,
DA_50H
;负数且有溢出,转到(50H)大.
;----------------------------------------
DA_51H:
MOV
60H,
51H
;(51H)大的处理程序.

SJMP
BJ_END
;转到结束.
;----------------------------------------
DA_50H:
MOV
60H,
50H
;(50H)大的处理程序.
;----------------------------------------
BJ_END:
SJMP
$
;比较程序结束.
;========================================
END

㈨ 单片机原理 ACC.7 是什么意思程序如下

jb
acc.7,
neg
该指令是一条位操作指令
为条件转移指令
即当累加器的最高位acc.7=1
时,满足条件
程序将跳转到neg

但如果acc.7=0
时,不满足条件
程序就不跳转了
将顺序执行吓一跳指令
符号说明:
操作码中j表示转移指令
b表示高电平
即为1转移
源操作数acc.7
(为累加器第7位
即最高位)
是位操作数
目的操作数
neg为要跳转的目标地址
呵呵
满意就选满意回答吧

㈩ 关于单片机的中断服务配置

#include <iom16v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
TIMER0 initialize - prescale:1024 /*定时器预分频,预分频由TCCRn的CS02,CS01,CS00确定,详情查看数据手册*/
// WGM: Normal/*定时器,也由TCCRn确定*/
// desired value: 20mSec/*定时器期望设定时间*/
// actual value: 19.861mSec (0.7%)/*定时器实际定时时间,误差比例*/
void timer0_init(void)
{
/*定时器停止,TCCR0寄存器完全控制timer0的运行情况,详细可参考数据手册。*/
TCCR0 = 0x00; //stop
TCNT0 = 0x71; //set count /*定时器寄存器开始值*/
OCR0 = 0x8F; //set compare /*定时器比较值*/
TCCR0 = 0x05; //start timer /*定时器开始*/
}
#pragma interrupt_handler timer0_comp_isr:20
void timer0_comp_isr(void)
{
//compare occured TCNT0=OCR0
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0x71; //reload counter value
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x03; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

阅读全文

与单片机comp相关的资料

热点内容
本地电脑如何做网站服务器 浏览:484
小寻s5下载的app怎么卸载 浏览:306
zbrushpdf 浏览:897
met肌肉能量技术pdf 浏览:195
php面试重点 浏览:683
如何从管理员界面删除文件夹 浏览:908
单片机三总线信息如何隔离 浏览:690
云服务器研发费用明细 浏览:957
unity3d手机游戏开发pdf 浏览:366
mysql重启命令linux 浏览:876
程序员日常业余内容 浏览:363
steam如何更改吃鸡服务器 浏览:212
我的世界up主多人用什么服务器 浏览:161
缝纫机电脑机编程 浏览:59
autowired源码深度解析 浏览:895
校园卡怎么上app 浏览:743
pascal高精度算法 浏览:870
阿里云服务器如何修改php 浏览:8
51单片机小项目 浏览:607
为什么d盘e盘无法解压 浏览:314