74ls595在proteus中的使用和淺談
//此程序主要是練習(xí)proteus中74ls595的使用方法(在程序的最后我再次說明一下)
//不過這個程序的仿真結(jié)果是對的,可是很郁悶,感覺不可思議,和自己想的不一樣,總感覺是錯的
//有誰也感覺到這個程序有錯誤,這是我的qq:117838621,我們可以探討一下
CLK_0 EQUP3.2;偽指令
CLK_1EQUP3.3
ORG 0000H
LJMP MAIN
ORG0030H
MAIN: LCALLINIT;調(diào)用INIT
MAIN_1:MOVR0,#30H
MOVR1,#7FH ;設(shè)置位選
MOVR2,#8;8位led需要8次循環(huán)
MAIN_2:MOVA,R1
LCALLLED;調(diào)用位控制子程序
NOP ;就是這個地方我感覺到不對
MOVA,@R0
LCALLDAT;調(diào)用數(shù)字顯示程序
NOP
NOP
LCALL DELAY
INCR0;自加一,為下一位的顯示做準備
MOVA,R1
RRA;段選右移,控制下一位的顯示
MOVR1,A
DJNZR2,MAIN_2
SJMPMAIN_1
DAT: CLRCLK_0
MOVSBUF,A
JNBTI,$
CLRTI
SETBCLK_0
RET
LED: CLRCLK_1;清零時鐘端
MOVSBUF,A;發(fā)送位選控制信號
JNBTI,$;等待,如果TI為1
CLRTI
SETBCLK_1;置時鐘信號
RET
INIT: MOVR0,#0
MOVR1,#30H
MOVR2,#8
MOVDPTR,#TAB;取表首地址
INIT_1:MOVA,R0
MOVCA,@A+DPTR;從表格中取數(shù)
MOV@R1,A;保存所取的數(shù)
INCR0;自加,為下次取書做準備
INCR1
DJNZR2,INIT_1;循環(huán)8次,將所有要在8個數(shù)碼管上顯示的數(shù)顯示出來
RET
DELAY:MOVR5,#10
L2: MOVR6,#200
L1:MOVR7,#200
DJNZR7,$
DJNZR6,L1
DJNZR5,L2
RET
TAB: DB11111100B ;0
DB01100000B ;1
DB11011010B ;2
DB11110010B ;3
DB01100110B ;4
DB10110110B ;5
DB10111110B ;6
DB11100000B ;7
END
//由74ls595的資料可以看出,有個tc_cp引腳,而只有在這個引腳的上升沿才能進去一位數(shù)據(jù)(并且里
//面的數(shù)據(jù)進行移位),但并不能輸出,只有在sh_cp這個引腳的上升沿時,數(shù)據(jù)才能并行輸出,
//而這個仿真圖上(書上寫的)竟然把單片機的RXD端接在ds端,TXD接在sh_cp上,這樣并不符合資料所說
評論