80c51单片机程序实例

如题所述

第1个回答  2019-12-02
给你发个产品的真实程序,控制交流滑差电机,既检测控制速度,又检测实际速度,还根据检测值控制电机在控制速度值下平稳运行。
ORG
0000H
;主轴控制程序
START:
AJMP
MAIN
;
REALSPDL
EQU
30H
REALSPDH
EQU
31H
CMPSPDL
EQU
32H
CMPSPDH
EQU
33H
ADJSPD
EQU
34H
BKCNT
EQU
35H
T0COUNT
EQU
36H
T1COUNT
EQU
37H
IOSPDL
EQU
38H
IOSPDH
EQU
39H
T_TMP
EQU
3AH
T_MS
EQU
3BH
T_250MS
EQU
3CH
CH1
EQU
3AH
CH2
EQU
3BH
UPSPD
EQU
2
DNSPD
EQU
2
STOPB
EQU
P1.4
RUNB
EQU
P1.3
LAMPB
EQU
P3.7
PZB
EQU
P3.4
PAB
EQU
P3.3
SPDB
EQU
P3.2
BREAKB
EQU
P1.1
ENABLE
EQU
P1.0
;-----------------------------------
ORG
0003H
SJMP
IE0DEAL
ORG
000BH
SJMP
TF0DEAL
ORG
0013H
SJMP
IE1DEAL
ORG
001BH
SJMP
TF1DEAL
ORG
0023H
SJMP
RITIDEAL
;------------------------------------
ORG
0030H
IE0DEAL:
CLR
TR0
MOV
IOSPDL,TL0
MOV
IOSPDH,TH0
MOV
TL0,#0
MOV
TH0,#0
SETB
TR0
PUSH
ACC
CLR
02H
MOV
A,REALSPDH
CLR
C
SUBB
A,#2
JC
IE0D2
SETB
02H
IE0D2:
POP
ACC
IE0D3:
RETI
;------------------------------------
TF0DEAL:
SETB
01H
RETI
;------------------------------------
IE1DEAL:
CLR
TR1
MOV
REALSPDL,TL1
MOV
REALSPDH,TH1
MOV
TL1,#0
MOV
TH1,#0
SETB
TR1
JB
03H,IE1D1
INC
T1COUNT
MOV
A,T1COUNT
CLR
C
SUBB
A,#250
JC
IE1D1
MOV
T1COUNT,#0
INC
T0COUNT
MOV
A,T0COUNT
CLR
C
SUBB
A,#4
JC
IE1D1
MOV
T0COUNT,#0
SETB
03H
IE1D1:
CLR
01H
RETI
;------------------------------------
TF1DEAL:
SETB
01H
MOV
REALSPDL,#0FFH
MOV
REALSPDH,#0FFH
RETI
;------------------------------------
RITIDEAL:
RETI
;******************************************************************************
DELAY2:
MOV
T_TMP,#0F9H
;0FAH=1ms
DJNZ
T_TMP,$
DJNZ
T_MS,DELAY2
;3EH=?ms
RET
;------------------------------------------------------------------------------
DELAY3:
MOV
T_MS,#0FAH
;0FAH=250ms
LCALL
DELAY2
DJNZ
T_250MS,DELAY3
;3FH=?*250ms
RET
;------------------------------------
MAIN:
CLR
EA
CLR
ET0
CLR
ET1
CLR
EX0
CLR
EX1
CLR
TR0
CLR
TR1
SETB
RUNB
SETB
STOPB
MOV
SP,#60H
MOV
TMOD,#11H
MOV
TCON,#05H
MOV
TL0,#0
MOV
TH0,#0
MOV
TL1,#0
MOV
TH1,#0
MOV
T_250MS,#20
LCALL
DELAY3
SETB
TR0
SETB
TR1
SETB
ET0
SETB
ET1
SETB
EX0
SETB
EX1
SETB
EA
MOV
T1COUNT,#0
MOV
T0COUNT,#0
SETB
BREAKB
SETB
ENABLE
SETB
01H
CLR
03H
CLR
04H
SETB
RUNB
SETB
STOPB
MOV
T_MS,#100
LCALL
DELAY2
INIT:
JB
RUNB,LOOP
MOV
T_MS,#200
LCALL
DELAY2
CPL
P3.7
SJMP
INIT
LOOP:
JNB
RUNB,CONTINUE
LOOP0:
JNB
STOPB,STOPP
RESUME:
SETB
BREAKB
SETB
ENABLE
SETB
01H
CLR
P3.7
MOV
TL0,#0
MOV
TH0,#0
MOV
TL1,#0
MOV
TH1,#0
MOV
T1COUNT,#0
MOV
T0COUNT,#0
MOV
BKCNT,#0
CLR
03H
CLR
04H
SJMP
LOOP
CONTINUE:
JB
01H,CNT1
LCALL
COMPARE
JZ
CNT3
CJNE
A,#0FFH,CNT2
CNT1:
SETB
BREAKB
CLR
ENABLE
SJMP
LOOP
CNT2:
SETB
BREAKB
SETB
ENABLE
SJMP
LOOP
CNT3:
JB
02H,CNT2
JNB
03H,CNT2
CLR
BREAKB
SETB
ENABLE
CNT4:
SJMP
LOOP
;------------------------------------
STOPP:
CLR
BREAKB
SETB
ENABLE
STOPP1:
JNB
STOPB,STOPP1
SETB
BREAKB
SETB
ENABLE
SJMP
LOOP
;------------------------------------
COMPARE:
MOV
A,REALSPDL
ADD
A,#1
MOV
CMPSPDL,A
MOV
A,REALSPDH
ADDC
A,#0
MOV
CMPSPDH,A
CLR
C
MOV
A,CMPSPDL
SUBB
A,IOSPDL
MOV
CMPSPDL,A
MOV
A,CMPSPDH
SUBB
A,IOSPDH
MOV
CMPSPDH,A
JC
COM11
;MORE
JZ
COM12
COM10:
MOV
A,#0FFH
RET
COM11:
MOV
A,#00H
RET
COM12:
LCALL
GETADJ
CLR
C
MOV
A,CMPSPDL
SUBB
A,ADJSPD
JNC
COM10
MOV
A,#0A0H
RET
;------------------------------------
GETADJ:
MOV
A,IOSPDH
JNZ
GETADJ0
MOV
A,IOSPDL
SUBB
A,#79
JNC
GETADJ01
MOV
ADJSPD,#3
;>700
RET
GETADJ01:
SUBB
A,#32
JNC
GETADJ03
MOV
ADJSPD,#6
;500~700
RET
GETADJ03:
SUBB
A,#73
JNC
GETADJ04
MOV
ADJSPD,#10
;300~500
RET
GETADJ04:
MOV
ADJSPD,#16
;216~300
RET
GETADJ0:
MOV
A,REALSPDH
SUBB
A,#2
JC
GETADJ1
MOV
ADJSPD,#3
;<108
RET
GETADJ1:
MOV
A,REALSPDL
SETB
C
RRC
A
SUBB
A,#150
JNC
GETADJ2
MOV
ADJSPD,#24
;>200
RET
GETADJ2:
SUBB
A,#50
JNC
GETADJ3
MOV
ADJSPD,#48
;150~200
RET
GETADJ3:
MOV
ADJSPD,#96
;<150
RET
;------------------------------------
END

80c51单片机120秒延时程序怎么编写
为了编写一个80C51单片机的120秒延时程序,需要遵循以下步骤。首先,我们需要创建一个名为“delay”的函数,用于实现延时功能。该函数接收一个参数“z”,即所需延时的周期数。在函数内部,我们使用两个嵌套的循环结构,分别用变量“x”和“y”作为循环计数器。外层循环的次数由参数“z”决定,即循环“z...

80c51单片机驱动LED显示。。。急急急
I\/O并行口直接驱动LED显示 1.实验任务 如图13所示,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。在数码管上循环显示0-9数字,时间间隔0.2秒。2.电路原理图 图4.7.1 3.系统板上硬件连线 把“单片机系统”区域中的P0.0\/AD0-P0.7\/...

80C51单片机,12mhz.利用中断程序控制8个灯依次亮灭,定时时间为1秒...
include<reg52.h> include<intrins.h> define uchar unsigned char define uint unsigned int unsigned char tab[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};void delay(uint e) \/\/延时函数,延时为0.5s { uint i,j;while(e--){ for(i=0;i<500;i++)for(j=0;j<110;...

80c51单片机交通灯程序
L:JNB P3.0,LP3 JNB P3.1,LP2 ;判断p3.1,p3.0口 ;如果P3.0为1的话,正常运行交通灯 ;如果P3.1为1的话,正常运行交通灯 ;如果P3.1为0的话,依次点亮灯 ;如果P3.0为0的话,停止交通灯,只有黄灯闪烁 ;正常运行交通灯 LP1:MOV P1,#61H CLR P3.2 CLR P3.3 CLR P3....

80c51单片机硬件怎么控制小灯的?
要使用80C51单片机硬件控制小灯,我们需要理解代码逻辑并将其应用到实际硬件中。首先,`#include main( )` 这一行表示我们使用的是单片机的主函数。主函数是单片机程序的入口点,所有程序执行都将从此处开始。然后,`int i,j,LED;` 定义了三个变量,`i` 和 `j` 作为循环计数器,`LED` 用于存储...

用汇编语言编写80c51单片机程序,求内部RAM中50H~59H十个单元内容的平均...
ORG 0030H MAIN:MOV R0,#50H MOV R7,#10 MOV R2,#00H MOV A,#00H LOOP:CLR C ADD A,@R0 JNC BBB INC R2 CLR C BBB: INC R0 DJNZ R7,LOOP MOV 5CH,A ;把和放5CH,不用管溢出的,和为s1 MOV 5BH,R2 ;把溢出的次数放地址5BH MOV B,5BH ;溢出的次数给B MOV A,...

80c51单片机P1.0--P1.7八灯循环程序。
C语言程序:include \/\/\/ void delay(unsigned int cnt)\/\/简单的延时 { while(--cnt);} \/\/\/ main(){ P1=0xfe;\/\/给初始化值 while(1){ delay(30000);\/\/delay at crystal frequency in 12MHz P1<<=1;\/\/左移一位 P1|=0x01;\/\/最后一位补1 if(P1==0x7f)\/\/检测是否移到最左端?{ ...

80c51单片机用汇编语言4个独立按键如何分别控制4个数码管从0到9到0...
汇编程序如下 S1 BIT P3.4 S2 BIT P3.5 S3 BIT P3.6 S4 BIT P3.7 DISM1 EQU 31H DISM2 EQU 32H DISM3 EQU 33H DISM4 EQU 34H START:MOV R0,#7FH CLEAR:MOV @R0,#0 DJNZ R0,CLEAR MAINP:ACALL DISUP;主程序 TEST1:JB S1,TEST2 ACALL DELK4 JB S1...

80c51单片机音乐播放器设计
音乐程序的设计原理和程序如下:设计原理 ⑴ 总体原理:乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。⑵ 单片机产生不同频率脉冲信号的原理:1)要产生音频脉冲,只要算出某一音频的脉冲(1\/频率),然后将此...

在80C51单片机中,已知时钟频率为6MHz,请编程使P1.0和P1.1分别输出周期为...
;下列程序,经过编译、仿真,符合要求:ORG 0000H SJMP START ORG 000BH SJMP T0_INT START:MOV TMOD, #01H MOV TH0, #9EH MOV TL0, #58H ;50ms@6MHz SETB TR0 SETB ET0 SETB EA MOV R2, #5 MOV A, #0 CLR P1.0 CLR P1.1 SJMP T0_INT:MOV TH0, #...

相似回答