十万火急~!!!请教高手~单片机原理与应用(写程序)
悬赏分:100 - 提问时间2009-12-6 13:33
需同时实现两个功能:
1. P1口控制的流水灯从右往左依次点亮,无限循环。
2. P0口控制的流水灯先单数亮,一秒后再双数灯亮。
问题补充:就那啥 MOV啊!LOOP什么的!
-----------------------------------
提问者: bluepopeye 已关闭 - 二级
------------------------
答复 共 3 条 答复中有满足楼主要求的,但是楼主没有选择最佳,违约关闭了题目。
------------------------
这个程序,经过PROTUSE检验,你试试看。
;----------------------------------
ORG 0000H
SJMP START
ORG 000BH
SJMP INT_T0
START:
MOV TMOD, #0x01
MOV TH0, #0x3C ;(65536-50000)/256;
MOV TL0, #0xB0 ;(65536-50000)%256;
SETB TR0
SETB ET0
SETB EA
MOV P1, #0x55
MOV R2, #0x7F
MOV R3, #20
LOOP:
MOV A, R2
RL A
MOV R2, A
MOV P0, A ;P0流水灯
LCALL DL500MS
SJMP LOOP
;-------------------------
INT_T0:
MOV TH0, #0x3C ;(65536-50000)/256;
MOV TL0, #0xB0 ;(65536-50000)%256;
DJNZ R3, E_T0
MOV R3, #20
XRL P1, #0xFF ;P1交替闪烁
E_T0:
RETI
;-------------------------
DL500MS:
MOV R5, #50
D0: MOV R6, #20
D1: MOV R7, #250
D2: DJNZ R7, D2
DJNZ R6, D1
DJNZ R5, D0
RET
END
;-------------------------
回答者: 做而论道 - 十一级 2009-12-6 16:02
-----------------------------------
/****************************************************
功能:1.P1口控制的流水灯从右往左依次点亮,无限循环。
2.P0口控制的流水灯先单数亮,一秒后再双数灯亮。
****************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z)
{
uint x, y;
for(x = 110; x > 0; x--) for(y = z; y > 0; y--);
}
void init() //利用中断精确1秒闪
{
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void time0() interrupt 1
{
uchar aa;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
aa++;
if(aa == 20) {
aa = 0;
P0 = ~P0;
}
}
void main()
{
uchar x;
init();
x = 0xFE;
P0 = 0xAA;
while(1) {
x = _crol_(x, 1);
P1 = x; delay(200);
}
}
回答者:----------- 四级 2009-12-6 13:48
-----------------------------------
原题网址:http://zhidao.baidu.com/question/128267959.html