89c51单片机程序 求解释

作者&投稿:张力 (若有异议请与网页底部的电邮联系)
求89c51单片机程序~

你啊 想学好单片机还是自己写吧
很简单的

#include
unsigned char i;
unsigned char temp;
unsigned char a,b;
void delay(void) //延时子程序//
{ unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
void main(void)
{ while(1)
{ temp=0xfe;
P1=temp; //看你的电路版上是哪个口接的LED就把P1口改成那个
delay();
for(i=1;i<8;i++)
{ a=temp<<i; //向左移i位//
b=temp>>(8-i); //向右移8-i位//
P1=a|b; //a或b//
delay();
}
for(i=1;i<8;i++)
{ a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}

ORG 1000h
START:MOV r0, #0c8h ;200
mov r1,#14h ;20
mov tmod,#20h ;定时器T1定时方式2,自动重装8 位
mov th1,#06h ;定时初值
mov tl1,#06h ;定时初值,tl1溢出时,th1的值自动装到tl1。定时时间为250us
setb tr1 ;启动T1
loop:jnb tf1,$ ;等待定时器溢出,溢出时,计数溢出标志位tf1机器置1
clr tf1 ;人工清0
djnz r0,loop ;r0减1,不为0 ,返回loop
mov r0,#0c8h ;为0 ,重赋值200
djnz r1,loop
mov r1,#14h ;即循环 200X20=4000次 X250us=1000000us=1S
cpl p1.1 ;1S求反一次,如果P1.1接一LED,即每秒亮或灭一次。
sjmp loop ;返回loop,继续。
end

汇编早就淘汰了
因为它效率太低了
你写一个汇编程序的时间,你可以写出来10个C语言程序了

我不同意汇编早就被淘汰的谬论,汇编执行效率不是C语言能比的,写C你能知道程序执行的过程吗?你能搞清RAM是怎样分配的?不能吧,学会汇编能够让你更好的理解单片机。此程序是一个LED的闪烁程序吧!采用定时器1工作方式2自动重载方式,此程序没有采用定时器1中断,而是用查询方式,,ORG 1000h
START:MOV r0, #0c8h;200
mov r1,#14h ;20
mov tmod,#20h ;定时器工作方式2,自动重载
mov th1,#06h ;赋初值
mov tl1,#06h
setb tr1 启动定时器1
loop:jnb tf1,$ ;判断定时时间是否溢出,查询方式溢出标志位TF1
clr tf1 ;清零,下次用
djnz r0,loop ;循环两百次,200*6=1200US
mov r0,#0c8h ;重新赋值,下次用
djnz r1,loop ;循环20次,20*1200,=2.4S
mov r1,#14h
cpl p1.1 对P1.1取反
sjmp loop
end

汇编是不可能淘汰的。
大学扩招多年,很多低层次的人,都参与了编程工作,
一堆一片的人,都停留在C语言的层次上,难以上进。


C51单片机:用数码管显示0到999的值。求c语言程序和原理图
include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;\/\/ 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};...

请问C51单片机电子时钟的设计程序怎么样编写啊?
BUFF_KEY EQU 21H ;键盘键 BUFF_LED1 EQU 22H ;数码管显示缓存 BUFF_LED2 EQU 23H BUFF_LED3 EQU 24H BUFF_LED4 EQU 25H BUFF_LED5 EQU 26H BUFF_LED6 EQU 27H BUFF_LED_LP EQU 28H ;T0键盘显示扫描缓存 HOR EQU 30H ;小时值缓存 MIN ...

c51单片机中如何用汇编语言编写流水灯
51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:;假设晶振12MHZ,P1控制8个LED低电平亮 ;启动入口=== ORG 0000H;复位启动 AJMP START;ORG 001BH;T1中断 AJMP T1INT;...

跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
include<iostream> include <intrins.h> unsigned int i;void delay_nms(unsigned int n) \/\/延时n ms { n=n+1;while(--n)delay_nus(900); \/\/延时 1ms,同时进行补偿 } void main(){ unsigned int i;while(1){ for(i=8;i>0;i--){ if(i==8)P1=~0x01;\/\/P1_0所接二极管...

设单片机系统如何编写一个完整的C51程序使P1.6和P1?
设单片机系统编写一个完整的C51程序使P1.6和P1,可以使用正确编码加上解压即可。 一、过程: 1、TMOD = 0X02;\/\/工作方式寄存器; 2、TH0 = 56;\/\/8位的用TH; 3、TL0 = 0;\/\/16位跟13位两个都用; 4、EA = 1;\/\/开总中断; 5、TR0 = 1;\/\/定时器开始计数,return。 二、单片机简介: 1、单片机...

c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序
1、首先先在proteus画出仿真图,方便仿真程序。2、接着来编写程序,先来写入头函数。2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写。3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义。4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向。5、检查没有错误,...

单片机C51程序编程题
include define uchar unsigned char define uint unsigned int sbit LED = P1^0;uchar T_Count = 0;void main(){ TMOD = 0x01;TH0 = (65535-5000)\/256;TL0 = (65535-5000)%256;IE = 0x82;TR0 = 1;while(1);} void LED_Flash() interrupt 1 { TH0 = (65535-5000)\/256;TL0 =...

编程,单片机C51编程
可根据用户在菜单中的选择项对测点进行某些设置,或者进行某些特殊的显示,例如对某个测点的实时曲线显示等。程序设计根据需求,首先建立一个结构,并定义一个结构变量kbdtabst ruct 。结构变量就是把多个不同类型的变量结合在一起形成的一个组合型变量,构成一个结构的各个变量称为结构元素。该结构中共有6...

单片机C51做一个秒表程序用定时器、数码管完成一个秒表程序 晶振频率...
0 MOV A,21H ; \/\/个位显示 MOVC A,@A+DPTR MOV P0,A RET DELAY: ;误差 0us MOV R6,#01H DL0:MOV R5,#61H DJNZ R5,DJNZ R6,DL0 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;\/\/共阳极0-9显示代码 DB 92H,82H,0F8H,80H,90H END ...

单片机c51求大神写一个C语言程序!挺急的
include<reg51.h>#include<intrins.h>void delay(int a){unsigned char i;while(a--)for(i=0;i<120;i++);}void ext0() interrupt 0{P1=0xff;delay(5000);}main(){unsigned char led=0xfe;EX0=1;IT0=1;EA=1;while(1) { P1=led; led=_crol_(led,1); delay(...

博山区13966005971: 89C51单片机汇编程序题 -
彩虹屏风: MOV 20H,R0 ;R0、R1要作为指针,所以内容直接转存到20H、21H MOV 21H,R1MOV A,PSW ;RS1,RS0的值代表了当前寄存器组中R0的绝对地址 ANL A,#18H ;取当前寄存器组的绝对地址 ADD A,#2H ;指针指向R2,R0、R1已经处理过了 ...

博山区13966005971: 单片机89c51程序问题 -
彩虹屏风: 这个程序 是一个二位数 秒 计数程序,二位数 要显示 如 显示 12 则要用二个数码管显示 12 是用一个字节记录的 所以 先把 2 送入个位显示(也可以先送十位) 那么 12 先清高4位 ( 注 高4位 是 1 低4位 2)保留低4位 再 查表获得显示 2 的字形码 送个位数码管 显示 接下来是 显示 1 (SWAP A)指令是高低4位互换 就是 12 变成 21 再保留低4位 1 再 查表获得显示 1

博山区13966005971: 89c51单片机程序求解 -
彩虹屏风: 唉吖.楼上的你没看到人家用的定时计数器1啊~程序没错,楼上纯粹误导楼主.定时器定时时间是10MS中断1次/100( 十进制数)也就是十六进制的64 = 1秒如果计数50(32)次*10MS=0.5M(500MS)同理可算得5S(5000MS)的定时那么R0 5000 / 10 = 500

博山区13966005971: 89c51单片机原理 -
彩虹屏风: 不是两句话就可以讲明白的,最好静下心来看教材(书本),感觉看电子教材效果不太好,可能因人而异,教材太多了,找一本仔细看,戒骄戒躁,可以看看网上的视频教程.对内部资源、IO口硬件上的理解很重要.我感觉51单片机就是判断输入口的电平状态(高1低0),分析判断计算,然后输出一个电平信号(1或0)给后一级的电路.学习的关键是,静.刚才只看到你的“89c51单片机原理”了,没注意下面的“秒表设计报告“.由于时间关系,只能简单说一下原理,①单片机内部定时器初始化;②显示时间初始化,可赋值0;③按开始键开启定时器进入定时器中断,每记一秒时间值加1;④按复位键关闭定时器,并将时间计数器清零.

博山区13966005971: 89C51单片机1S的延时程序? -
彩虹屏风: void delayms() // 延时子程序 对应12M晶振 {unsigned int ms=1000;while(ms--) //每一次循环1ms{for(i = 0; i < 120; i++);} }

博山区13966005971: 求给单片机89C51编个程序 -
彩虹屏风: 这个没法写,因为你用什么AD采样芯片,你用什么显示,LCD,LED,是否需要数字滤波什么的...都没说,AD采样主要是看你用什么芯片,不同芯片程序完全不同,不过你起码能抽象一个函数叫 get_adc()来得到采样值,然后如果需要对采样值滤波,就需要个滤波算法来对采样进行处理这有是一段程序,也可以没有, 然后计算出一个稳定的采样值,是AD值,需要转换成安培单位(根据你的做实验的数据统计如果线性不好还要做线性化处理)... 最后就是周期的更新LCD或LED的显示,不同设备程序不同... 一般应该会用LCD,就像计算器欧姆表上的那种显示屏,很简单,查看一下LCD的使用说明书,关键看你用哪一款...

博山区13966005971: 有关单片机89c51的一段程序 -
彩虹屏风: KEY EQU P3.0 ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 SETB ET0 SETB EA MOV R1,#20 MOV R2,#1 MOV A,#0FEH ...

博山区13966005971: 求c程序..89c51单片机....具体为:TH0计时间,TL0计外部脉冲数,当TL0计满16个脉冲,查看TH0计量的时间.
彩虹屏风: 应该是这样的,当外部计数器接到脉冲后触发中断程序,在中断程序中开始计数,同时让时钟中断开始工作,当计满16个数后通过程序让时钟中断停止.

博山区13966005971: 急求用89C51单片机控制电机的程序啊? -
彩虹屏风: 参考:http://hi.baidu.com/chary8088/blog/item/177332ce39cef70a92457ea9.html接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧.这几天给自...

博山区13966005971: 紧急求助,关于单片机程序的,89c51的汇编程序,求达人解救 -
彩虹屏风: SORT: MOV A,R0 ; MOV R1, A MOV A,R2 ;字节数送入R5 MOV R5, ACLR F0 ;互换标志位F0清零 DEC R5 ; MOV A,@R1LOOP: MOV R3,A ; INC R1 ; CLR C ; MOV A,@R1 ;比较大小 SUBB A,R3 ; JNC LOOP1 ; SETB F0 ;互换标志位F0置1 MOV A,R3; ; XCH A,@R1 ;两个数互换 DEC R1 ; XCH A,@R1 ; INC R1LOOP1: MOV A,R1 DJNZ R5,LOOP JB F0,SORT RET

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网