51单片机编程求指导。。。

来自:    更新日期:早些时候
单片机51编程~

稍做改动,可以实现流水灯了,试试看:
void main()
{
while(1) {
a = 3;
while(a--) {
P1 = 0x55; delay(22000);
P1 = 0xAA; delay(22000);
}
temp=0xfe;
b = 24;
delay(10000);
while(b--) {
temp = _crol_(temp, 1);
P1 = temp; delay(10000);
} } }

假设在P1口:

loop:
mov a,p1
anl a,#0fh
mov b,a
xrl a,#03h
jz mot1 ;如果cd闭合
mov a,b
xrl a,#0ch ;如果ab闭合
jz mot2
mov a,b
xrl a,#00h ;如果abcd闭合
jz mot3
jnz err ;如果不属于上述情况
mot1:
setb p1.7
clr p1.5
ljmp next
mot2:
clr p1.7
setb p1.5
ljmp next
mot3:
setb p1.7
setb p1.5
ljmp next
err:
clr p1.7
clr p1.5
next:
limp loop

嘿嘿 楼上的老兄给出的程序也不对呀 看上去挺工整的,错误好几出啊,是得不到正确结果的。
其实算法很简单,只要熟悉一下单片机的加法指令和循环移位指令,自己就可以编写出来。
1 算法:
就是使用指针 连续对20H开始的连续4个单字节二进制数相加,结果存入31H单元,要考虑进位,(进位部分存入31H单元)
求平均值 就是对和除4,可以使用循环右移指令 每移一次 相当于除2 总共2次就行了。

2 楼上的错误: 使用指令 ADD A,31H 求的和在累加器A里,并没有存入31H
使用指令 MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
同样没有将结果回送给31H单元(保存)

呵呵 满意就选满意回答 (想要正确程序 可以发消息给我)

SQUD:
MOV R0,#20H ;间接寻址首地址送R0
MOV 30H,#0 ;累加结果高位清零
MOV 31H,#0 ;累加结果低位清零
MOV R7,#4 ;循环4次累加4个数
SQUD1:
MOV A,@R0 ;取数送A
ADD A,31H ;与结果低位相加
JNC SQUD2 ;没有进位转
INC 30H ;有进位高位加1
SQUD2:
INC R0 ;地址加1
DJNZ R7,SQUD1 ;判断5个数是否加完
MOV R7,#2
SQUD3:
MOV A,30H ;高低位送A
RRC A ;带进位循环右移
MOV 30H,A ;回送30H
MOV A,31H ;低位送A
RRC A ;带进位循环右移完成一次除2
DJNZ R7,SQUD3 ;共移两次相当于除4
MOV 32H,A ;结果存32H
RET


51单片机编程求指导。。。视频

相关评论:
  • 13041706218我用keil编译的程序出错,不懂,求指导?数据地址空间溢出是怎么回事...
    安蒋清你内存用的太多了,超出了这款芯片的实际RAM容量,所以报错。好好把程序中的变量整理整理,不要定义太多的全局变量和静态变量,有些地方RAM能复用就复用,数组用多少就开多大,不要大手大脚。单片机使用内存都要精打细算的,咱们和写PC软件的兄弟可不能比啊。

  • 13041706218我的51单片机程序忽然烧不进去了,求大虾指导,拜谢了
    安蒋清出现这种情况有很多种,有可能是烧录程序的软件出了问题(我之前也遇到过,当时我用的是STC-ISPV4.88,当时怎么弄就是烧不进,后来重装成STC-ISPV4.80就可以了);也有可能是芯片烧坏了,你可以换一个芯片试试,希望能够帮到你。

  • 1304170621851单片机内部eeprom怎么使用,求大神指导,查过一些资料,但是看不明白...
    安蒋清P4 EQU 0C0H IAP_DATA EQU 0C2H IAP_ADDRH EQU 0C3H IAP_ADDRL EQU 0C4H IAP_CMD EQU 0C5H IAP_TRIG EQU 0C6H IAP_CONTR EQU 0C7H ;定义ISP\/IAP命令 ISP_IAP_BYTE_READ EQU 1H ;字节读 ISP_IAP_BYTE_PROGRAM EQU 2H ;字节编程,可以将1写成0,要将...

  • 1304170621851单片机问题,这是个在LED上显示从0到100,程序中display()显示函数...
    安蒋清你放在if里面,那就只有当if条件成立时,才能执行这个函数,而从你的程序来看,进入定时器T0中断20次才能满足这个if的条件,这就导致运行display函数的频率降低,数码管扫描频率降低。

  • 13041706218C51单片机学习求助!
    安蒋清单片机我玩得很顺手,然后去学ARM,才发现那东西不像单片机那么容易上手,好在我还学过DSP,这才算是有点入门帮忙。所以ARM的学习是不能急的。单片机的学习,我想你就不必要去学习51了,直接学习AVR,你就算学了51,但对你学习AVR没有什么帮忙,因为这两个单片机相差太多了,我想51也要快过时了。学...

  • 13041706218求解51单片机C语言程序
    安蒋清EX0=1;开启的是外部中断, 而你使用的是外部中断0,void int1() interrupt 0 是0而不是1,IE0(TCON.1),外部中断0中断请求标志位。你也没打开。你改下吧,不懂再问吧。

  • 13041706218AVR延时程序一段代码不懂 求高手指导
    安蒋清那个只是个大概,意思是微秒级的意思。C语言的程序很难做到精确到1us的延时。

  • 13041706218求高手指导用51单片机控制多个三极管开关的外围电路图
    安蒋清这个电路挺简单的,图传给你。不过,这些电阻并非完全的并联串联,因为三极管在饱和导通时,Vce是有0.1~0.3V的压降。图中用两只电阻为例说明,多个你自己应该知道怎么做。

  • 13041706218单片机原理与应用实践教学指导书 内容提要
    安蒋清这是一本专注于单片机原理与应用实践的教学指导书,主要分为两个部分。第一部分首先会详细地讲解AEDK5196ET系统,以及LCA51ET软件的基础概念和操作方法,旨在为读者提供系统性的理论基础。在第二部分,书中精心设计了十七个实验项目,涵盖了广泛的实践内容。这些实验涵盖了单片机软硬件的开发和调试技巧,...

  • 13041706218怎么学号汇编语言啊,本人比较笨 求指导啊
    安蒋清先买本51单片机的汇编看看。先熟悉存储器、定时器\/计时器、输入输出等硬件结构。不用深入 再熟悉51的汇编按着章节顺序看就行看一两遍能懂差不多就行,看不懂就多看两遍。每小节的例子记得好好看看。然后再看扩展和接口。再后面就看应用实例。看不懂了就往前翻书。例子都看懂了就差不多了。然后再...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网