找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19911|回复: 11
打印 上一主题 下一主题
收起左侧

STC12与STC15单片机还有什么重要的不同?

[复制链接]
跳转到指定楼层
楼主
这是我一年前初上51hei论坛发问,获得网友指点做出来的61键含力度的midi电子琴线路与程序,这原本是在STC12的单片机开发板上开发的,底板也做好了,就是没有焊接,后来觉得这板太过复杂,要用两的单片机协作才能完成,就设计了另一片比较简单,只用一只STC15的板,心想移植起来应该是很顺利吧,板子焊好后,插入键盘扫描线,按了按琴键,没有反应,原来定时器参数很多是不同的,改正之后,键盘终于有反应了,但只有一些键盘有反应,翻看说明书才知道P0上电后必须设定为双向标准接口才行的,但是有12个键盘失常,按着不放会不断产生MIDI码,这在软件里是没有的。怀疑是否接线有短路,或者底板有误,但换上另一底板后毛病一样。

为了验证软件没有错误,连夜焊接了用STC12的板,没想到“一插就响”,一点毛病都没有,可见问题出在STC12和STC15系列的不同。应该是里面的那个开关不需设定,不知翻阅了多少次整千页的STC15说明书都没有找到那个开关。

这板子用了P0,P6,P7,P6和P7是没有任何复用开关的,应该是P0的问题,但我查看键盘的接线,那12个毛病的键都是连着P6.3的,是不是P6有未知的复用开关呢?请论坛用过STC15的前辈指点一下。

另外我发现市面上是买不到64脚的STC15开发板,STC8就有很多,这是否意味着STC15只是过渡性产品?






;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


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2019-2-19 19:31 | 只看该作者
程序太多太乱了,看不懂
因为是用汇编,换一个型号的单片机你就得对一下所有用到的地址是不是一样的,如果用到ADC或者PWM就要看一下使用方法是不是一样的,反正,基本上就是重新再写一个程序了
这就是为什么大多人不喜欢用汇编的原因了,所谓的移植性几乎是没有,就算是同一个公司的51也一样
回复

使用道具 举报

板凳
ID:69072 发表于 2019-2-19 20:09 | 只看该作者
1.引脚不一样
2.指令周期 stc15跟快 如果存在延迟函数 需要修改
回复

使用道具 举报

地板
ID:432823 发表于 2019-2-19 21:20 | 只看该作者
STC12与STC15上电初始化时引脚初始电平不一定一致,要使用必须要注意对引脚要作状态要设置。
回复

使用道具 举报

5#
ID:283954 发表于 2019-2-20 16:11 | 只看该作者
Y_G_G 发表于 2019-2-19 19:31
程序太多太乱了,看不懂
因为是用汇编,换一个型号的单片机你就得对一下所有用到的地址是不是一样的,如果用 ...

我因为学不会C,所以一直用A, 程序真的很乱,放了一年后自己都看不大懂了,得花一天适应,这程序相当复杂,但问题就在SCANNER扫描的部分,会产生乱码,经过反复试验,这才发现问题在于P0的输入部分,因为这里接上8条长电线到键盘的内部扫描板,而且在不按键时是悬空的,会产生干扰,找了8颗4.7K电阻把P0口拉高后,问题就消失了,在开发板上开发时,由于板上的每个接口都有接一个接V+的电阻+LED,所以不存在这个问题,自己做板没考虑到这个,犯错误了,谢谢各位的关注。

回复

使用道具 举报

6#
ID:283954 发表于 2019-2-20 16:14 | 只看该作者
凤姐438 发表于 2019-2-19 20:09
1.引脚不一样
2.指令周期 stc15跟快 如果存在延迟函数 需要修改

STC15的确比较快,改了又改才把UART的波特率调好。
回复

使用道具 举报

7#
ID:283954 发表于 2019-2-20 16:17 | 只看该作者
yaoji123 发表于 2019-2-19 21:20
STC12与STC15上电初始化时引脚初始电平不一定一致,要使用必须要注意对引脚要作状态要设置。

STC15里面有很多新的开关,如果熟悉,这些开关很有用。
回复

使用道具 举报

8#
ID:401564 发表于 2019-2-20 23:25 | 只看该作者
推荐你使用STC8系列,其实STC的8051单片机都是差不多的,区别实际上并不大,推荐STC8的原因是因为STC8的ADC是12位的,而且还可以用外部的参考电压,如果你想要高精度的AD功能的话,STC8A系列估计是性价比最高的了,我做过一个5v的电压表,精确度可以达到2mV,这已经差不多达到福禄克入门万用表了
回复

使用道具 举报

9#
ID:283954 发表于 2019-2-22 16:55 | 只看该作者
我的入门是STC12,不应在老地方打转,是应该提升了,看到STC8的功能简直要流口水,尤其那个内部时钟能够在唤醒后64个机器周期就稳定运行,很希望知道唤醒后是否来得及接收串口的第一个字符,我在低功耗上花很多时间实验始终不理想,有了这个新器件,又能继续实验了。
回复

使用道具 举报

10#
ID:477932 发表于 2019-2-22 22:14 | 只看该作者
牛人一枚!顶起!
回复

使用道具 举报

11#
ID:318927 发表于 2019-2-23 15:09 | 只看该作者
存储大小不一样,我用51,2500条代码很难动了,15的话8000多条还可以
回复

使用道具 举报

12#
ID:479675 发表于 2019-2-23 15:29 | 只看该作者
显示程序应该可以直接用,触摸屏如果带芯片应该也问题不大,不带芯片要用到AD,就要看数据手册了,一般可直接代换的,但注意有某些寄存器不同而已
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表