標(biāo)題: STC12與STC15單片機還有什么重要的不同? [打印本頁]

作者: dalaoshi    時間: 2019-2-19 16:06
標(biāo)題: STC12與STC15單片機還有什么重要的不同?
這是我一年前初上51hei論壇發(fā)問,獲得網(wǎng)友指點做出來的61鍵含力度的midi電子琴線路與程序,這原本是在STC12的單片機開發(fā)板上開發(fā)的,底板也做好了,就是沒有焊接,后來覺得這板太過復(fù)雜,要用兩的單片機協(xié)作才能完成,就設(shè)計了另一片比較簡單,只用一只STC15的板,心想移植起來應(yīng)該是很順利吧,板子焊好后,插入鍵盤掃描線,按了按琴鍵,沒有反應(yīng),原來定時器參數(shù)很多是不同的,改正之后,鍵盤終于有反應(yīng)了,但只有一些鍵盤有反應(yīng),翻看說明書才知道P0上電后必須設(shè)定為雙向標(biāo)準(zhǔn)接口才行的,但是有12個鍵盤失常,按著不放會不斷產(chǎn)生MIDI碼,這在軟件里是沒有的。懷疑是否接線有短路,或者底板有誤,但換上另一底板后毛病一樣。

為了驗證軟件沒有錯誤,連夜焊接了用STC12的板,沒想到“一插就響”,一點毛病都沒有,可見問題出在STC12和STC15系列的不同。應(yīng)該是里面的那個開關(guān)不需設(shè)定,不知翻閱了多少次整千頁的STC15說明書都沒有找到那個開關(guān)。

這板子用了P0,P6,P7,P6和P7是沒有任何復(fù)用開關(guān)的,應(yīng)該是P0的問題,但我查看鍵盤的接線,那12個毛病的鍵都是連著P6.3的,是不是P6有未知的復(fù)用開關(guān)呢?請論壇用過STC15的前輩指點一下。

另外我發(fā)現(xiàn)市面上是買不到64腳的STC15開發(fā)板,STC8就有很多,這是否意味著STC15只是過渡性產(chǎn)品?






;THIS IS FOR KEYBOARD TESTING
;THIS VERSION CHANGE CRYSTAL FROM 18M TO 11M, CHANGE AUXR.S2MODE TO ZERO 3/9/2018 output as midi
;32H FOR ROW COUNT LOOP
;33H FOR STORE SCAN DATA(MAY CONAIN FEW 0 THAT MEAN CONTACT)
;34H FOR LOOP
;35H FOR ADD TO ROW FORM 1-8 OR 9-16
;3AH FOR KEYNUMBER

FIRSTBUFFER EQU 80H
LASTBUFFER EQU 0FFH
;BRT EQU 09CH
;BRTLOAD EQU 212        ;212(22m, 31.875 midi smod=1) 219(18.432, 32.1U MIDI SMOD=1) 250(3.68, 38400) 247(11.0592, 38400), 245(11.0592,31.4midi);251(18.432, 115200)
;BRTLOAD EQU 226        ;226(18.432, 38400 SMOD=1) 241(18.432, 38400) 250(3.68, 38400) 247(11.0592, 38400), 251(18.432, 115200)
S2CON EQU 9AH          ;S2SM0, S2SM1, S2SM2, S2REN, S2TB8, S2RB8, S2TI, S2RI
IE2 EQU 0AFH           ;X, X, X, X, X, X, ESPI, ES2
S2BUF EQU 9BH
T2H EQU 0D6H           ;UART2 HIGH T2 AS
T2L EQU 0D7H           ;UART2 LOW
;P0 EQU 080H
;P1 EQU 090H
;P2 EQU 0A0H
;P3 EQU 0B0H
P4 EQU 0C0H
P5 EQU 0C8H
P6 EQU 0E8H
P7 EQU 0F8H
AUXR EQU 8EH
AUXR2 EQU 08FH
AUXR1 EQU 0A2H
WAKE_CLKO EQU 08FH
T4T3M EQU 0D1H
P_SW2 EQU 0BAH
P_SW1 EQU 0A2H


ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXT_INT0 ;EXTERNAL INTERRUPT0
ORG 000BH
LJMP TIMER_0  ;TIMER0 INTERRUPT
ORG 0013H
LJMP EXT_INT1 ;EXTERNAL INTERRUPT1
ORG 001BH
LJMP TIMER_1  ;TIMER_1 INTERRUPT
ORG 0023H
LJMP UART1    ;UART1 RECEIVED INTERRUPT
ORG 002BH
LJMP ADC      
ORG 0033H
LJMP LVD
ORG 003BH
LJMP PCA
ORG 0043H
LJMP UART2    ;UART2 RECEIVED INTERRUPT
ORG 004BH
LJMP SPI
ORG 0053H
LJMP INT2
ORG 005BH
LJMP INT3
ORG 0063H
LJMP TIMER_2
ORG 0083H
LJMP INT4
ORG 008BH
LJMP UART3
ORG 0093H
LJMP UART4
ORG 009BH
LJMP TIMER_3
ORG 00A3H
LJMP TIMER_4
ORG 00ABH
LJMP COMPARER
ORG 00B3H
LJMP PWM
ORG 00BBH
LJMP PWM_ERR

ORG 0100H    ; PROGRAM SET

MAIN:
MOV P0, #0FFH
;MOV P1, #0FFH
;MOV P2, #0FFH
;MOV P3, #0FFH
;MOV P4, #0FFH
;MOV P5, #0FFH
;MOV P6, #0FFH
;MOV P7, #0FFH

;MOV P_SW1, #00000000B    ;BIT7=U1 S1-S1, 6=U1-S1-S0  
MOV P_SW2, #00000110B    ;4=U4-SW TO  2=U3-SW 1=U1-SW

MOV 93H, #00000000B      ;SETP0 0,0=I/0, 0,1=HIGH CURRENT OUTPUT, 1,0=HIGH IMPEDENY INPUT 1,1=OPEN COLLECTIVE OUTPUT
MOV 94H, #00000000B      ;SETP0

;MOV 91H, #00000000B     ;SETP1
;MOV 92H, #00000000B     ;SETP1
;MOV 95H, #00000000B     ;SETP2.4 AS HIGHOUTXURRENT FOR IR POWER
;MOV 96H, #00010000B     ;SETP2.4 AS HIGHOUTXURRENT
;MOV 0B1H, #00000000B    ;SETP3
;MOV 0B92H, #00000000B   ;SETP3
;MOV 0B3H, #00000000B    ;SETP4.1 AS HIGHOUTXURRENT FOR IR POWER FOR NEW LE BOARD
;MOV 0B4H, #00010010B    ;SETP4.1 AS HIGHOUTXURRENT
;MOV 0C9H, #00000000B    ;SETP5
;MOV 0CAH, #00000000B    ;SETP5

MOV 0CBH, #00000000B    ;SETP6
MOV 0CCH, #00000000B    ;SETP6
MOV 0E1H, #00000000B    ;SETP7
MOV 0E2H, #00000000B    ;SETP7


;MOV 97H, #00001111B         ;SLOW DOWN
MOV WAKE_CLKO,#00000000B     ;ENABLE BRT(=4),T1(=2) T0(=1) HAVE CLOCK OUTPUT T2@P1.0 T1@P3.5 T0@P3.4
MOV T2H, #0FFH
MOV T2L, #112                ;212(22m 31250 2us) 214 162=57600 160=56000 112=38400
MOV AUXR,#00010100B           ;T0x12,T1x12,UART_M0x6,T2RUN,T2C/T,T2x12,EXTRAM,S1ST2
;MOV AUXR1, #00010000B        ;MOVE UART2 TO TX2=P4.3 RX2=4.2
MOV AUXR2,#00000100B          ;8FH x, EX4,EX3,EX2,X,T2CLKO, T1CLK0, T0CLK0
MOV T4T3M, #00000000B         ;T4RUN, T4C/T, T4x12, T4OUT,

MOV TMOD, #00010001B         ;TIMER_1 AS MOD1 (16BIT COUNTER) ;TIMER_0 AS MOD 1 (16BIT COUNTER)
                             ;GATE, C/T,M1,M0(T1) GATE, C/T,M1,MO(T0)
MOV PCON, #10000000B         ;THIS DOUBLE THE BRT AND T0 T1 RATE
SETB ET1                     ;ENABLE T1 INTERRUPT
SETB TR1                     ;RUN T1

LCALL INITIAL_UART2          ;USE BRT AS SERIAL BAUD GENERATE FOR UART2
SETB  EA                     ;ENAABLE ALL INTERRUPT


LCALL CLEANRAM

MOV R0, #FIRSTBUFFER         ;INIT THE BTYE TO SENT IN BUFFER POINTER
MOV R1, #FIRSTBUFFER         ;INIT THE POINTER FOR BYTE CAN STORE IN BUFFER

CLR P2.5
SCANNER:
DJNZ 4CH, SCANNER1
CLR P2.5
SCANNER1:
SCANP2:              ; SHIFT P2 AND READ P0
MOV 32H, #8          ;8 BITS TO SHIFT
MOV 50H, #11111111B  ;THIS BYTE FOR SHIFT AND OUTPUT TO P2 &P3
CLR C
SCANP2A:
MOV A, 50H
RRC A
MOV 50H, A

;======P6
MOV P6, 50H          ;P2 ONE ROW LOW
LCALL DELAY4         ;MUST WAIT STABLE
MOV A, P0            ;READ FROM P0
CPL A
MOV 35H, #0          ;THIS WILL ADD TO ROW TO MAKE 0-7
LCALL STOREDATA
MOV P6, #11111111B   ;END OF SCANP2
LCALL DELAY4

;======P7
MOV P7, 50H          ;P3 ONE ROW LOW
LCALL DELAY4         ;MUST WAIT STABLE
MOV A, P0            ;READ FROM P0
CPL A
MOV 35H, #8          ;THIS WILL ADD TO ROW TO MAKE 0-7
LCALL STOREDATA
MOV P7, #11111111B   ;END OF SCANP3
LCALL DELAY4

SCANNEXT1:
SETB C
DJNZ 32H, SCANP2A
NOP                  ;CHECK BUFFER AND SENT
NOP
MOV A, R0            
XRL A, R1
JZ SCANNEREXIT       ;R0 R1 EQUAL NO NEW BYTE
;LCALL OUTBUFFER
SETB TR1
SCANNEREXIT:
JMP SCANNER

PUTBUFFER:
MOV @R1, A
CJNE R1, #LASTBUFFER, NEXTR1
MOV R1, #FIRSTBUFFER
JMP PUTBUFFEREXIT
NEXTR1:
INC R1  ;POINT TO NEXT BUFFER
PUTBUFFEREXIT:
RET

OUTBUFFER:
MOV A, @R0
LCALL SENTONEBYTE2
CJNE R0, #LASTBUFFER, NEXTR0
MOV R0, #FIRSTBUFFER
JMP OUTBUFFEREXIT
NEXTR0:
INC R0  ;POINT TO NEXT BUFFER
OUTBUFFEREXIT:
RET

STOREDATA:           ;32H CONTAIN ROW UMBER THAT CAUSE LOW
PUSH PSW
MOV 34H, #8          ;8 BIT TO SHIFT
MOV 33H, A           ;ACC CONTAIN 8BITS WITH FEW HIGH(CAUSE BY KEYPRESS)
STOREDATA1:          ;WILL LOOP 8 TIMES CHECKING EVERY BIT, CONTROL BY 34H
LCALL COUNTPOSITION  ;CODE BY SCANNER 4C 54 COUNT BY
LCALL KEYMAP         ;RETURN KEYNUMBER A AFTER LOOKUP THE MAP THAT REPRESENT KEYNUMBER(0-60), IF FIRST KEY THEN 0(UPPER),80(LOWER)

MOV 3AH, A           ;SAVE KEYNUMBER TO 3AH, 0-127 IS UPPER KEY, 128-255 IS LOWER KEY
MOV A, 33H           
RLC A                ;CHECK EACH BIT OF 33H SEE 0 OR 1 AND DECIDE WHERE TO GO
MOV 33H, A
JNC DOKEY1           ;CONTACT POINT NOT CONTACT GO NOTEOFF SUBROTINE
LCALL NOTEON         ;NOTE ON SUBROUTINE
JMP STOREDATANEXT
DOKEY1:
LCALL NOTEOFF        ;NOTEOFF SUBROUTINE

STOREDATANEXT:
DJNZ 34H, STOREDATA1 ;8 LOOP NEEDED
DOKEYEXIT:
POP PSW
RET

NOTEON:           ;KEY CONTACT DETECTED
MOV A, 3AH      
RLC A             ;CHECK UPPER OR LOWER
JC NOTEON1        ;LOWER KEY SO DO OUTPUT

;----------UPPER
MOV DPH, #0
MOV DPL, 3AH
MOVX A, @DPTR     ;READ OLD DATA
JNZ NOTEONEXIT    ;ALREADY CONTACTED, DO NOTHNG SO EXIT

;;---DELAY TIME CHECK
;MOV DPH, #1
;MOV DPL, 3AH
;MOVX A, @DPTR     ;READ OLD DATA
;JNZ NOTEONEXIT    ;TIMER NOT REACH 0 SO MUST WAIT SO EXIT

MOV DPH, #0
MOV DPL, 3AH
MOV A, #1
MOVX @DPTR, A     ;CONTACT JUST START, PUT 1 FOR COUNT UP BY TIMER EVERY 1MS
MOVX @DPTR, A     ;CONTACT JUST START, PUT 1 FOR COUNT UP BY TIMER EVERY 1MS
LCALL DELAY4
JMP NOTEONEXIT

;----------LOWER
NOTEON1:
MOV A, 3AH
ANL A, #01111111B    ;MASKING BIT7
MOV DPH, #0
MOV DPL, A
MOVX A, @DPTR        ;READ VELOCITY
MOV 3BH, A           ;SAVE VELOCITY
JZ NOTEONEXIT        ;UPPER KEY NOT YET CONTACTED, DO NOTHING GO EXIT
INC A                ;INC 1 TO SEE, IF FFH THEN WILL BE ZERO
JZ NOTEONEXIT        ;IF FFH THEN WILL ZERO MEAN NOTE ALREADY OUTPUT, NEED WAIT FOR NOTEOFF SENT, DO NOTHING GO EXIT
INC A
JZ NOTEONEXIT        ;IF FEH THEN WILL ZERO MEAN NOTE ALREADY OUTPUT, NEED WAIT FOR UPPERKEY RELEASE, DO NOTHING GO EXIT

MOV A, #10010000B    ;MIDI NOTEON CHANNEL1
LCALL PUTBUFFER     ;SENT STATUS

MOV A, 3AH
ANL A, #01111111B    ;MASKING BIT7   
LCALL PUTBUFFER      ;SENT KEY NUMBER

MOV A, 3BH
CPL A                ;PROCESS VELOCITY, CPL AND DIV BY 2
MOV B, #2
DIV AB
;ADD A, #2            ;MINIMUM 4, MAZ 7F
ANL A, #01111111B    ;MASKING BIT7, PROTECT NOT OVERFLOW
;MOV A, #7EH
LCALL PUTBUFFER      ;SENT VELOCITY   

MOV A, 3AH
ANL A, #01111111B    ;MASKING BIT7
MOV DPH, #0
MOV DPL, A
MOV A, #0FEH
MOVX @DPTR, A        ;MARK AS FFH WAIT FOR RELEASE FOR SENT NOTEOFF
MOVX @DPTR, A        ;MARK AS FFH WAIT FOR RELEASE FOR SENT NOTEOFF
LCALL DELAY4
NOTEONEXIT:
RET

NOTEOFF:             ;KEY NOT-CONTACT DETECTED
MOV A, 3AH      
RLC A                ;CHECK UPPER OR LOWER
JNC NOTEOFF1         ;UPPER KEY SO DO NOTEOFF

;=====LOWER KEY
MOV A, 3AH
ANL A, #01111111B    ;MASKING
NOP                  ;LOWER KEY RELEASE, PUT FF
NOP
MOV DPH, #0
MOV DPL, A
MOVX A, @DPTR        ;READ OLD DATA
INC A
INC A
JNZ NOTEOFFEXIT      ;IF NOT FEH THEN WILL BE NOT ZERO MEAN NOTEON NOT YET SENT, DO NOTHING SO EXI
MOV A, #0FFH
MOVX @DPTR, A        ;MARK THAT KEY LOCATION #FF THAT ALLOW NOTEOFF SENT
MOVX @DPTR, A        ;MARK THAT KEY LOCATION #FF THAT ALLOW NOTEOFF SENT
LCALL DELAY4
JMP NOTEOFFEXIT

;UPPER KEY
NOTEOFF1:
NOP                  ;UPPER KEY RELEASE, CHECK 0FFH FOR SENT NOTEOFF
NOP
MOV DPH, #0
MOV DPL, 3AH
MOVX A, @DPTR        ;READ OLD DATA
INC A
JNZ NOTEOFFEXIT      ;IF NOT FFH THEN WILL BE NOT ZERO MEAN NOTEON NOT YET SENT OR N0T YET RELAESE, DO NOTHING SO EXIT
;-------SENT NOTEOFF
MOV A, #10000000B    ;MIDI NOTEOFF CHANNEL1
LCALL PUTBUFFER      ;SENT NOTEOFF STATUS BYTE
MOV A, 3AH
LCALL PUTBUFFER      ;SENT KEYNUMBER
MOV A, #0
LCALL PUTBUFFER      ;SENT ZERO VELOCITY

MOV DPH, #0
MOV DPL, 3AH
MOV A, #0
MOVX @DPTR, A         ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS
MOVX @DPTR, A         ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS

MOV DPH, #1           ;PUT A VALUE TO KEY LOCATION#2 FOR NOT REPEAT DELAY
MOV DPL, 3AH
MOV A, #30H           ;THIS IS THE VALUE!! ;30H
MOVX @DPTR, A         ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS
MOVX @DPTR, A         ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS
LCALL DELAY4
NOTEOFFEXIT:
RET

COUNTPOSITION:
PUSH PSW
MOV A, 32H        ;ROW POSITION 1-8 P3,P2
ADD A, 35H        ;IF P2 THEN ADD 0(REMAIN 1-8), IF P3 THEN ADD 8(BECOME 9-16)
MOV B, #8         ;8 CONTACT POINT FOR EACH ROW
MUL AB            ;NUMBER 8,16,24,32,40.......128
CLR C
SUBB A, #8        ;MAKE A 0,8,16,24.....120
ADD A, 34H        ;34H CONTAIN 1-8 COLUME NUMBER(EACH BIT OF 33H) FORM 1 TO 128
DEC A             ;MAKE AS 0-127 SYSTEM
POP PSW
RET

KEYMAP:
MOV DPH, #10H
MOV DPL, #00H
MOVC A,@A+DPTR
ADD A, #8
RET

TIMER_1:  ;USE FOR MICRO CLOCK 1MS 184, 30 ,100US=248 250
;CPL P1.4
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
MOV DPH, #0
MOV DPL, #0
NOP
NOP
TIMERLOOP:
MOVX A, @DPTR
JZ TIMER_1NEXT              ;ZERO MEAN NOT UPPER KEY NOT YET PRESS, SO NO ADD
CJNE A, #0FFH, TIMERLOOP1A  ;NOT FF THEN CAN INCREASE VALUE, FF MEAN UPPER KEY RELEASED
JMP TIMER_1NEXT
TIMERLOOP1A:
CJNE A, #0FEH, TIMERLOOP1   ;NOT FE THEN CAN INCREASE VALUE, FE MEAN LOWER KEY HAS RELEASE
JMP TIMER_1NEXT
TIMERLOOP1:                 ;HERE CHECK NOT YET MAX THEN ADD
CJNE A, #0FDH, TIMER_1A     ;NOT YET MAX
JMP TIMER_1NEXT
TIMER_1A:
INC A
MOVX @DPTR, A
TIMER_1NEXT:
INC DPL
MOV A, DPL
CJNE A, #70, TIMERLOOP      ;#70 IS 70 KEY TO CHECK

TIMER_1EXIT:
MOV TH1, #253; #200;#248
MOV TL1, #0 ;#250
POP DPL
POP DPH
POP PSW
POP ACC
RETI

SENTONEBYTE2:        ;A SENT OUT
PUSH ACC
MOV S2BUF, A         ;LOAD A TO BUFFER
MOV A, S2CON         ;1111,1101, CLEAR SECONDARY UART TRANSIMIT INTERRUPT FLAG
ANL A, #0FDH         ;#11111101B
MOV S2CON, A
UART2WAIT:
MOV A, S2CON
ANL A, #02H          ;0000,0010
CJNE A,#02H, UART2WAIT
SETB P2.5
MOV A, S2CON
ANL A, #0FDH         ;1111,1101, CLEAR SECONDARY UART TRANSIMIT INTERRUPT FLAG
MOV S2CON, A
NOP
POP ACC
RET

DELAY4:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET


EXT_INT0:            ;IF P3.2 H2L COME HERE SET TIMER, ONLY FIRST H2L WILL ACT
RETI

TIMER_0:             ;CHECK INPUT MIDI SIGNAL AT P3.2
RETI

EXT_INT1:            ;USE FOR INFRA RED
RETI

INITIAL_UART2:            ;USE FOR SENT MIDI DATA
MOV S2CON, #01010000B    ;SET AS BAUD VERIABLE, NO ODD/EVEN CHECK
MOV IE2, #01H            ;ENABLE UART2 INTERRUPT
RET

;-----INTERUPT
UART1:
RETI
ADC:
RETI
PCA:
RETI
LVD:
RETI
SPI:
RETI
UART2:
RETI
INT2:
RETI
INT3:
RETI
TIMER_2:
RETI
INT4:
RETI
UART3:
RETI
UART4:
RETI
TIMER_3:
RETI
TIMER_4:
RETI
COMPARER:
RETI
PWM:
RETI
PWM_ERR:
RETI


CLEANRAM:
MOV DPH,#0
MOV DPL, #0
CLEANRAM1:
MOV A, #0
MOVX @DPTR, A
INC DPL
MOV A, DPL
JNZ CLEANRAM1
INC DPH
MOV A, DPH
CJNE A, #4, CLEANRAM1
RET

DELAY3:
MOV 56H, #255
SLOWDOWN0:
MOV 55H, #255 ;255
SLOWDOWN:
MOV 57H, #11 ;6 ;1
SLOWDOWN2:
DJNZ 57H, SLOWDOWN2
DJNZ 55H, SLOWDOWN
DJNZ 56H, SLOWDOWN0
RET

ORG 1000H ;KEY MAPPING CONVERT SCANNER NUMBER TO KEYBOARD PHYSICAL POSITION (MUSIC KEY 1-61)  
;UPPER-KEY+128=LOWER-KEY
;OPTAIN UPPER CONTACT POINT'S SCAN CODE MANUALLY AND PUT KEYNUMBER AT SCANCODE VALUE POSITION
;OPTAIN LOWER CONTACT POINT'S SCAN CODE MANUALLY AND PUT KEYNUMBER+128 AT SCANCODE VALUE POSITION
;EXAMPLE: IF KEY#38H, UPPER KEY SCANCODE IS 28H,PUT 28H POSITION AS 38H, LOWER KEY SCANCODE IS 30H, PUT 30H POSITION AS 8+38H=B8H
;  00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH
;  ---------------------------------------------------------------
DB 20H,21H,22H,23H,24H,25H,26H,27H,30H,31H,32H,33H,34H,35H,36H,37H ;0 16  0F
DB 0B0H,0B1H,0B2H,0B3H,0B4H,0B5H,0B6H,0B7H,28H,29H,2AH,2BH,2CH,2DH,2EH,2FH ;0 16  1F
DB 0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH,0AFH,38H,39H,3AH,3BH,3CH,00H,00H,00H ;0 16  2F
DB 0B8H,0B9H,0BAH,0BBH,0BCH,00H,00H,00H,90H,91H,92H,93H,94H,95H,96H,97H ;0 16  3F
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH ;0 80  4F
DB 88H,89H,8AH,8BH,8CH,8DH,8EH,8FH,80H,81H,82H,83H,84H,85H,86H,87H ;0 96  5F
DB 10H,11H,12H,13H,14H,15H,16H,17H,98H,99H,9AH,9BH,9CH,9DH,9EH,9FH ;0 16  6F
DB 18H,19H,1AH,1BH,1CH,1DH,1EH,1FH,0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H ;0 16  7F

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  8F
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  9F
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  AF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  BF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  CF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  DF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  EF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16  FF
END



作者: Y_G_G    時間: 2019-2-19 19:31
程序太多太亂了,看不懂
因為是用匯編,換一個型號的單片機你就得對一下所有用到的地址是不是一樣的,如果用到ADC或者PWM就要看一下使用方法是不是一樣的,反正,基本上就是重新再寫一個程序了
這就是為什么大多人不喜歡用匯編的原因了,所謂的移植性幾乎是沒有,就算是同一個公司的51也一樣
作者: 鳳姐438    時間: 2019-2-19 20:09
1.引腳不一樣
2.指令周期 stc15跟快 如果存在延遲函數(shù) 需要修改

作者: yaoji123    時間: 2019-2-19 21:20
STC12與STC15上電初始化時引腳初始電平不一定一致,要使用必須要注意對引腳要作狀態(tài)要設(shè)置。
作者: dalaoshi    時間: 2019-2-20 16:11
Y_G_G 發(fā)表于 2019-2-19 19:31
程序太多太亂了,看不懂
因為是用匯編,換一個型號的單片機你就得對一下所有用到的地址是不是一樣的,如果用 ...

我因為學(xué)不會C,所以一直用A, 程序真的很亂,放了一年后自己都看不大懂了,得花一天適應(yīng),這程序相當(dāng)復(fù)雜,但問題就在SCANNER掃描的部分,會產(chǎn)生亂碼,經(jīng)過反復(fù)試驗,這才發(fā)現(xiàn)問題在于P0的輸入部分,因為這里接上8條長電線到鍵盤的內(nèi)部掃描板,而且在不按鍵時是懸空的,會產(chǎn)生干擾,找了8顆4.7K電阻把P0口拉高后,問題就消失了,在開發(fā)板上開發(fā)時,由于板上的每個接口都有接一個接V+的電阻+LED,所以不存在這個問題,自己做板沒考慮到這個,犯錯誤了,謝謝各位的關(guān)注。


作者: dalaoshi    時間: 2019-2-20 16:14
鳳姐438 發(fā)表于 2019-2-19 20:09
1.引腳不一樣
2.指令周期 stc15跟快 如果存在延遲函數(shù) 需要修改

STC15的確比較快,改了又改才把UART的波特率調(diào)好。
作者: dalaoshi    時間: 2019-2-20 16:17
yaoji123 發(fā)表于 2019-2-19 21:20
STC12與STC15上電初始化時引腳初始電平不一定一致,要使用必須要注意對引腳要作狀態(tài)要設(shè)置。

STC15里面有很多新的開關(guān),如果熟悉,這些開關(guān)很有用。
作者: Y_G_G    時間: 2019-2-20 23:25
推薦你使用STC8系列,其實STC的8051單片機都是差不多的,區(qū)別實際上并不大,推薦STC8的原因是因為STC8的ADC是12位的,而且還可以用外部的參考電壓,如果你想要高精度的AD功能的話,STC8A系列估計是性價比最高的了,我做過一個5v的電壓表,精確度可以達到2mV,這已經(jīng)差不多達到福祿克入門萬用表了
作者: dalaoshi    時間: 2019-2-22 16:55
我的入門是STC12,不應(yīng)在老地方打轉(zhuǎn),是應(yīng)該提升了,看到STC8的功能簡直要流口水,尤其那個內(nèi)部時鐘能夠在喚醒后64個機器周期就穩(wěn)定運行,很希望知道喚醒后是否來得及接收串口的第一個字符,我在低功耗上花很多時間實驗始終不理想,有了這個新器件,又能繼續(xù)實驗了。
作者: static    時間: 2019-2-22 22:14
牛人一枚!頂起!
作者: 2583715224    時間: 2019-2-23 15:09
存儲大小不一樣,我用51,2500條代碼很難動了,15的話8000多條還可以
作者: MAITU1    時間: 2019-2-23 15:29
顯示程序應(yīng)該可以直接用,觸摸屏如果帶芯片應(yīng)該也問題不大,不帶芯片要用到AD,就要看數(shù)據(jù)手冊了,一般可直接代換的,但注意有某些寄存器不同而已




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1