
FLASHTIME EQU 01H
黄灯闪烁三次
OUT 00H,AL
MOV 03H,BL
START:
OUT 12h,AL点亮黄灯
MOV AX,02H
CALL Delay
OUT 00h,AL熄灭所有灯
MOV AX,02H
CALL Delay
OUT 12h,AL点亮黄灯
MOV AX,02H
CALL Delay
OUT 00h,AL熄灭滚猛掘所有灯
MOV AX,02H
CALL Delay
OUT 12h,AL点亮黄灯
MOV AX,02H
CALL Delay
OUT 00h,AL熄灭所有大核灯知神
MOV AX,02H
CALL Delay
MAIN:
OUT 21h,AL
MOV AX,0AH
CALL Delay
OUT 22H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 20H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 22H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 20H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 22H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 20H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 0CH,AL
MOV AX,10H
CALL Delay
OUT 14H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 04H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 14H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 04H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 14H,AL
MOV AX,FLASHTIME
CALL Delay
OUT 04H,AL
MOV AX,FLASHTIME
CALL Delay
JMP MAIN
CODE ENDS
Delay:
CALL Delay1S
DEC AX
CMP AX,0
JNZ Delay
RET
Delay1S:
MOV CX,04FFFH
Delayloop:
DEC CX
CMP CX,0
JNZ Delayloop
RET
END
由于我已灶举经将重点放java系列的研究上了,这里只是简单的看了你写的代码(还不能很肯定有无细节错误) 根据你所写: 我觉得串讲注意以下并以此贯穿1.总述其功能,并在述完功能后,讲清整个逻辑关系,既然是自己写,讲这个逻辑应该不难吧 (强调这一步主要是讲清你这个设计思路 可以以主程序入口地址来分别引讲)
2.根据以上的逻辑分析,具体谈一些重要分步的实现关键.(选择性的讲你认为是比较有价值的)
3.强调一些细节,我想你在写这个的竖辩带时候,一定会有很多细节问题,在不断的编写过程中得以完善. (如果时间没完的话,讲完后,你还可以再简述功能)
附:至于语言余芦的组织,你写了这么多解释,相信还是有一个语言表达能力, 这里谈下,我的一个学习习惯: 就是在学习中,总结笔记,一方面可以锻炼表达总结能力, 也给以后的复习还来方便(毕竟自己写的笔记,看起更亲切,更易懂)
=================
看了你的留言,只好简单的给你说下,实在抱歉,目前,我暂时放下了汇编,等java上了台阶,才会再来win32相关. 8086 王爽那本书很好!!! 如果你学了汇编,没看过此书,强烈推荐给你!!!
代码修改如下,经keil编译,proteus仿真结果为 P1.0亮10秒,然后P1.1亮2秒,然后P1.2亮10秒,最后P1.0亮10秒,,,
#include <reg51.h>sbit R=P1^0//HONG
sbit W=P1^1//HUANG
sbit L=P1^2//LV
unsigned int a,b=0
//unsigned char code c[]={0xfe,0xfc,0xfb}//1110,1100,1011
unsigned char code c[]={0xfe,0xfD,0xfb,0xfd}//1110,1101,1011,1101//红 黄 绿 黄//修正黄灯的值,增加一个状态
void timer10s () interrupt 1
{
if (a<2000)
{
TH0=0xec//5ms
TL0=0x78
a++
// b=0//这里不能对b赋值
TR0=1
TR1=0//【增加】
}
if (a>=2000)
{
TH0=0xec
TL0=0x78
a=0
b++//b=1
if(b==4) b=0//【增加】
TR1=1
TR0=0//【增加】
}
}
void timer2s ()interrupt 3
{
if (a<400)
{
TH1=0xec
TL1=0x78
a++
TR1=1
TR0=0
}
if (a>=400)
{
TH1=0xec
TL1=0x78
a=0
b++//b=2
//
if(b==4) b=0//【增加】
TR0=1
TR1=0//【增加】
}
}
void main ()
{
EA=1
ET0=1
ET1=1
TMOD=0X11
TH0=0xec//5MS
TL0=0x78
TH1=0xec
TL1=0x78
TR0=1
TR1=0
P1=c[0]
b=0////【增加】
while (1)
{
switch (b)
{
case 0x00:P1=c[0]break
case 0x01:P1=c[1]break
case 0x02:P1=c[2]break
瞎旅 case 0x03:P1=c[3]break//增加一个状态
}
}
}
以上代码可以优化,如下:
#include <reg51.h>
sbit R=P1^0//HONG
sbit W=P1^1//HUANG
sbit L=P1^2//LV
unsigned int a,b=0
unsigned char code c[]={0xfe,0xfD,0xfb,0xfd}
void timer10s () interrupt 1
{
TH0=0xec//5ms
TL0=0x78
a++
if(TR1==1) TR1=0
if (a>=2000)
{
a=0
b++
if(b==4) b=0
TR1=1
TR0=0
}
}
void timer2s ()interrupt 3
{
TH1=0xec
TL1=0x78
a++
if(TR0==1) TR0=0
if (a>=400)
{
a=0
b++
if(b==4) b=0
TR0=1
TR1=0
}
}
void main ()
{
EA=1
ET0=1
ET1=1
TMOD=0X11
TH0=0xec//5MS
TL0=0x78
TH1=0xec
TL1=0x78
TR0=1
TR1=0
a=0//
磨漏凳 b=0//
while (1)
{
switch (b)
{
case 0x00:P1=c[0]break
case 0x01:P1=c[1]break
搜渣 case 0x02:P1=c[2]break
case 0x03:P1=c[3]break
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)