我不知道是不是還有其他人也會碰到這種錯誤
我簡單的提一下
寫程序的風格 問題 不知道LZ 是自學的匯編 還是在大學生 在笑學習的
我想對你說一句 你寫程序很爛 希望你別見氣
做為規范 規范這個東西 并不是說 它很牛 我們得照著做
而是就像我們溝通的語言一樣 大家都遵守規范了 我們才能更有效的溝通
LZ 的程序 很亂 放進UV2 首先 一個程序 沒有一條備注
這里我建議剛學寫程序 時 就最好學著 給程序加注釋 在最開始的時候 你覺得很簡單 不必要
但是到了后來 你寫一個 上千條的匯編 行的程序時 你就會發現 你去吃了飯 陪女朋友去看場 電影 和朋友打打籃球 回來 你連自己寫的程序都要花很大的時間去理順里面的各個跳轉 各個框架
這也是為什么你看但飯是搞計算機程序設計的東西 經常趕通宵 加班 思路不能段 不然又會花很多的時間去整理清楚
多的話不說了 話有點直 希望你不要介意
改好的程序
我貼出來 你自己看吧
標號 頂格 代碼縮進對齊
整個程序 整齊 歸整 盡量多加一些備注 至少10%
;-----------------------------------------
;流水燈測試程序
;時間:---
;作者;---
;說明:----
;-----------------------------------------
ORG 00H
JMP START
ORG 03H
JMP EXTO ;03H是外部中斷0的入口地址 。。。。。。。。。。 這里應該是 0B 和1B
ORG 13H ;13H是外部中斷1的入口地址 。。。。。。。。。。
JMP ETX1
;-----------------------------------------
;主程序
;-----------------------------------------
START: MOV IE, #10000101B
MOV IP, #00000100B
MOV TCON, #00000000B
MOV SP, #70H
MOV A, #00
MOV P1, A
MOV A,#00
LOOP: MOV P1, A
CALL DELAY
CPL A
JMP LOOP
;-----------------------------------------
;定時器0中斷子程序
;-----------------------------------------
EXTO: PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
MOV R3, #03
LOOP1: MOV A, #0FFH
CLR C
MOV R2, #08H
LOOP2: RLC A
MOV P1, A
CALL DELAY
DJNZ R2, LOOP2
MOV R2, #07
LOOP3: RRC A
MOV P1, A
CALL DELAY
DJNZ R2, LOOP3
DJNZ R3, LOOP1
POP PSW
POP ACC
RETI
;-----------------------------------------
;定時器1中斷子程序
;-----------------------------------------
ETX1: PUSH ACC
PUSH PSW
SETB RS1
CLR RS0
MOV R3, #03
LOOP4: MOV A, #0FCH
MOV R2, #06
LOOP5: RL A
MOV P1, A
CALL DELAY
DJNZ R2, LOOP5
MOV R2, #06
LOOP6: RR A
MOV P1,A
CALL DELAY
DJNZ R2, LOOP6
DJNZ R3, LOOP4
POP PSW
POP ACC
RETI
;-----------------------------------------
;延時子程序
;-----------------------------------------
DELAY:
MOV R5, #20
D1: MOV R6, #20
D2: MOV R7, #248
DJNZ R7, $
DJNZ R6, D2
DJNZ R5, D1
RET
END
ORG 00H
JMP START
ORG 0003H
JMP EXT0
ORG 0013H
LJMP EXT1
START: MOV IE, #10000101B
MOV IP, #00000100B
MOV TCON, #00000000B
MOV SP, #70H
MOV A, #00
MOV P1, A
MOV A,#00
LOOP: MOV P1, A
CALL DELAY
CPL A
JMP LOOP
EXT0: PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
MOV R3, #03
LOOP1: MOV A, #0FFH
CLR C
MOV R2, #08H
LOOP2: RLC A
MOV P1, A
CALL DELAY
DJNZ R2, LOOP2
MOV R2, #07
LOOP3: RRC A
MOV P1, A
CALL DELAY
DJNZ R2, LOOP3
DJNZ R3, LOOP1
POP PSW
POP ACC
RETI
EXT1: PUSH ACC
PUSH PSW
SETB RS1
CLR RS0
MOV R3, #03
LOOP4: MOV A, #0FCH
MOV R2, #06
LOOP5: RL A
MOV P1, A
CALL DELAY
DJNZ R2, LOOP5
MOV R2, #06
LOOP6: RR A
MOV P1,A
CALL DELAY
DJNZ R2, LOOP6
DJNZ R3, LOOP4
POP PSW
POP ACC
RETI
DELAY: MOV R5, #20
D1: MOV R6, #20
D2: MOV R7, #248
DJNZ R7, $
DJNZ R6, D2
DJNZ R5, D1
RET
END
改好的,但不知道你的程序對不對,注意標號中的O和0及標號的寫法!
頂!樓上的。
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h>
void delay(void) //延時子程序
{
unsigned int i,j; //循環延時
for(i=0;i<400;i++)
{
for(j=0;j<121;j++)
{;}
}
}
void main(void) //主程序
{
uchar code ledp[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0xff,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xff,
0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x00,0xff,
0x3f,0x9f,0xcf,0xe7,0xf3,0xf9,0xfc,0x00,0xff,
0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x00,0xff,
0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0x00,0xff,
0xf0,0xe1,0xc3,0x87,0x0f,0x00,0xff,
0x0f,0x87,0xc3,0xe1,0xf0,0x00,0xff,
0xe7,0xc3,0x81,0x00,0xff,
0x81,0xc3,0xe7,0x00,0xff,
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff,0x00,0xff,
0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,0xff,0x00,0xff,
0x00,0xff,0x00,0xff};//預定的寫入P1的值
uchar ledi; //定義一個變量
while(1)
{
P1=ledp[ledi]; //P1口讀取預定值
delay(); //調用延時程序
ledi++; //延時一次后讀入下一個值
if(ledi==104) //如果讀到最后一個數值
{
ledi=0; //則將變量置0,從頭開始
}
}
}
獻丑了
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |