求助两道有关51系列单片机的编程题

1 单片机从8155的PA口读进板键开关的状态然后从PB口将对应的状态输出到八个灯(开关闭合亮 反之灭)试写程序。如果把题目中的PA和PB互换,程序应该作何调整?
2 使用内部定时器0,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次,P1口的P1.0-P1.7分别接八个发光二极管,要求编写程序模拟一时序控制装置,要求八盏灯依次循环点亮,间隔时间是一秒钟,即第一秒第一盏亮,第二秒第二盏亮……第八秒第八盏亮(记为一次循环),第九秒第一盏亮……并一直循环下去。并使用R3记录循环次数。
这道题的程序是
ORG 0000H
AJMP START
ORG 000BH /*定时器中断入口*/
AJMP INT_T0 /*定时器子程序*/
ORG 0040H
START: MOV SP,#60H /*设定堆栈入口*/
MOV TMOD,#10H /*设定定时器工作方式*/
MOV TL0,#0E0H /*设定定时器初始值*/
MOV TH0,#0B1H
MOV R0,#00H /*R0记录循环次数,置初值*/
MOV R1,#50 /*置中断次数*/
MOV R3,#00H /*R3记录循环次数,初值0*/
SETB TR0 /*定时器0工作*/
SETB ET0 /*定时器中断允许*/
SETB EA /*CPU中断允许*/
SJMP $ /*等待中断*/
INT_T0:PUSH ACC /*堆栈,保存现场*/
PUSH PSW
PUSH DPL
PUSH DPH
CLR TR0 /*关定时器0*/
MOV TL0,#0E0H /*重新置定时器初值*/
MOV TH0,#0B1H
SETB TR0 /*开定时器0*/
DJNZ R1,EXIT /*条件满足,跳出,恢复现场*/
MOV R1,#50 /*置循环次数*/
MOV DPTR,#DATA1 /*DPTR指向数据区首地址*/
MOV A,R0
MOVC A,@A+DPTR /*查表,选择要输出的值*/
MOV P1,A /*向P1口输出*/
INC R0 /*循环一次R0自加1*/
ANL 00H,#07H /*判断循环是否到8次*/
MOV A,R1
JNZ EXIT /*判断条件,跳转*/
INC R3 /*记录循环次数*/
EXIT: POP DPH /*堆栈,恢复现场*/
POP DPL
POP PSW
POP ACC
RETI
DATA1: DB 01H,02H,04H,08H,10H,20H,40H,80H /*数据区*/
END
如果将题中的定时器0改为定时器1,P1口改为P2口,亮灭的规则改为:开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮......一直循环下去。请问应如何在原程序上修改?

第1个回答  2009-05-30
咋跟我原来做的实验差不多。。。

MCS-51单片机试题
1.MCS-51单片机中断的开放和关闭是如何控制的?如果要对定时器T1开放中断,可以用什么指令实现?答:通过对中断允许寄存器IE进行设置,可以控制中断的开放和关闭。执行指令 `SETB ET1` 和 `SETB EA` 即可开放T1中断。2.设程序执行前F0=0,RS1,RS0=00B,请问机器执行如下程序后PSW中各位的状态是...

51单片机的编程问题?
C51语句: P0_0 = 1;P0_0声明为sbit,因此编译成:setb 80h,这将把位地址空间的0x80地址的bit的值置1。这个位正是P0口的bit0,执行后,P0.0将输出高阻态。而P0.1-.7不会变化。2:C51为什么要嵌套汇编 51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合I...

关于51单片机C语言编程的问题。
图中蓝色比红色超前90°,每次蓝色下降沿时,红色都是低电平,所以我认为计数器不会加,只能减。

51单片机的题目
1、让P3口置1,目的是为了下面(第二条指令)正确读入P3口的状态,从而能正确判断开关的闭合。此图上P3口只用到P3.0。2、K闭合时,灯亮,反知灭。JB指令判断出1,则跳转,判断出0,则不跳转,而是顺序执行。第一条指令上面已说作用。第二条指令判断P3.0状态,当K打开时,第二条指令判断得P3...

关于51单片机中的计时小编程问题
1、 原程序存在错误。定时器方式0最大计数值为2^13=8192us,初装值为E018H=57368us,即定时定时初装值已远大于最大计数值。如果要在方式0下定时1ms=1000us,初装值应为8192-1000=7192 = 1C18H ,其它语句的执行因为是2~3us级,可忽略(因数中断程序中的三个语句耗时仅6us)。你可能要问:...

51单片机C51语言的几个问题。
编译不通过)只能在主函数之前或头文件下方来这么一句,你可以打开reg52.h文件看看其实里面有很多这种定义,目的是为某个寄存器或IO口(其实还是寄存器)的某一位起个别名,使编程时既可以位操作又使编译能通过。问题二:sbit在问题1中说的很清楚了,就是为某一位起别名,sfr 这个关键字在reg52.h头...

急求几套51单片机经典考试题。好的追加20分哦!
一.填空题(每空2分,共30分)1、真值1001001B的反码为01001001 ;其补码为 01001001 。2、MCS-51系列单片机内部数据存储器,即内RAM中位寻址区的地址范围是 128 B 工作寄存器区的地址范围是 00—1FH 。3、程序状态标志字寄存器PSW中的PSW.7的含义是 奇偶标志 ;PSW.0的含义是 进位\/借位标志 ...

51单片机编程题,用汇编语言怎么做?
在8051单片机的时钟频率为6MHz,那么定时器的计数脉冲周期就是 2uS;sbit CP=P1^0;void Timer0_init(){ TMOD |=0x01; \/\/T0定时器,方式1,采用16位定时器 TH0 = (65536-500)\/256; \/\/定时器装初值500, 即 1000uS 中断一次 TL0 = (65536-500)%256;EA=1; ET0=1; TR0=1;} ...

51单片机题目,如何解?
JNB ACC.7,ZHENG ;若A的最高位等于零,跳转 CPL A ORL A,#80H ADD A,#01H ;A的最高位为1,取反,保留最高位,加1 ZHENG: MOV Y,A ;A移动至Y(32H存储单元)1、32H单元的数据 0BAH的最高位为1,取反,0b10111010——>0b01000101 与80H相或,0b010...

关于51单片机的几个问题
4、“MSC 51单片机定时\\计数器对外部脉冲进行计数时,要求输入的计数脉冲的高电平或低电平的持续时间不少于一个机器周期”,这句话哪里有错,实在没看出来 有错吗?--- 5、两数相减用补码运算时,是不是CY等于0表示第一个数小于第二个数,CY等于1表示第一个数大于第二个数 单片机的计算,是按...

相似回答