Thêm đi bác ơi. Luồng đang thu hút, rất hay và bổ ích
Thông báo
Collapse
No announcement yet.
Ai đã thất bại trong việc làm led matrix ....
Collapse
X
-
các pác công nhận bổ ích ko
sao pác mod ko giúp em chuyển về diễn đàn đi em mun nó thật sự có thể giúp các pác khác
mod yên tâm topic này còn nhìu thứ nữa nó sẽ ko kết thúc một khi em ko còn khả năng
pác hỉu giúp em đi nhá chỉ mun góp thêm bài cho diễn đàn thôi
năm trong đây có mấy người xem và nó cũng ko đúng chủ đề nữa xem xet giúp em mod nhé8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
-
Nguyên văn bởi hoangphat Xem bài viếtcác pác công nhận bổ ích ko
sao pác mod ko giúp em chuyển về diễn đàn đi em mun nó thật sự có thể giúp các pác khác
mod yên tâm topic này còn nhìu thứ nữa nó sẽ ko kết thúc một khi em ko còn khả năng
pác hỉu giúp em đi nhá chỉ mun góp thêm bài cho diễn đàn thôi
năm trong đây có mấy người xem và nó cũng ko đúng chủ đề nữa xem xet giúp em mod nhé|
Comment
-
hehe em mê nên học hỏi nhìu vào diễn đàn h có cơ hội em lại giúp lại các pác khác
thành công nhất thời chủ yếu là do 2 chữ "ĐAM MÊ" nên
đam mê nên cái j làm cũng dc cả các pác ủng hộ em nhá
hi vọng topic thành công em sẽ cố gắng post thêm bài để có cái tham khảo8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
-
Nhờ mọi người xem và hỗ trợ giúp mình. Xem đoạn code này có vấn đề gì không ?
;Walking message display for 2051
$mod2051
CR EQU 0dh ; carriage return
LF EQU 0ah ; line feed
BAUD_9600 EQU 0fdh ; 9600 baud
;eeprom equates
FADDR EQU 0a0h ; fixed address for AT24Cxx EEPROMs
PADDR EQU 0 ; programmable address (0..7)
; Register definitions for serial eeprom
zdata EQU r1 ; data register
addr_lo EQU r2 ; 2-byte address register
addr_hi EQU r3 ;
;register definitions for hex to dec routine
memptr equ r0 ;ram memory pointer
col equ r4 ;column increment
scans equ r5 ;number of time the diplay is multiplexed
;before incrementing
count equ r6 ;col count for each char displayed
char_count equ r7 ;
;
; Microcontroller connections to AT24Cxx serial bus lines.
SCL BIT p3.5 ; serial clock
SDA BIT p3.7 ; serial data
;servo connections
clear bit p3.4 ;master clear
clk bit p3.2 ;clock
row bit p3.3 ;row of display on
DSEG AT 20H
delay_value: ds 1
message: ds 48 ;max lenght of string to display
ORG 5fH ; stack origin
stack: DS 20H ; stack depth
CSEG
ORG 0000H ; power on/reset vector
jmp cold_start
ORG 0003H ; external interrupt 0 vector
reti ; undefined
ORG 000BH ; timer 0 overflow vector
reti
ORG 0013H ; external interrupt 1 vector
reti ; undefined
ORG 001BH ; timer 1 overflow vector
reti ; undefined
ORG 0023H ; serial I/O interrupt vector
reti
ORG 40H ; begin constant data space
menu: DB CR,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF,LF
db LF,LF,LF,LF,LF,LF,LF,LF,LF,LF
db 'Walking led message display program',LF,CR
db '___________________________________',LF,CR
db 'Written by Peter Averill',LF,LF,LF,CR
db 'Press:-',LF,CR
db ' s to load the message from the PC terminated in a $',cr,lf
db ' d to display message',CR,LF,LF,LF,0
matrix: db 00h,00h,00h,00h,00h ;space
db 00h,00h,7dh,00h,00h ;!
db 00h,60h,00h,60h,00h ;"
db 14h,7fh,14h,7fh,14h ;#
db 32h,49h,7fh,49h,26h ;$
db 62h,64h,08h,13h,23h ;%
db 36h,49h,35h,02h,05h ;&
db 00h,00h,00h,50h,60h ;'
db 1ch,22h,41h,00h,00h ;(
db 00h,00h,41h,22h,1ch
db 2ah,1ch,3eh,1ch,2ah ;*
db 08h,08h,3eh,08h,08h ;+
db 00h,01h,02h,00h,00h ;,
db 08h,08h,08h,08h,08h ;-
db 00h,00h,01h,00h,00h ;.
db 02h,04h,08h,10h,20h ;/
db 3eh,45h,49h,51h,3eh ;0
db 00h,21h,7fh,01h,00h ;1
db 27h,49h,49h,49h,31h ;2
db 22h,49h,49h,49h,36h ;3
db 0ch,14h,24h,7fh,04h ;4
db 7ah,49h,49h,49h,46h ;5
db 3eh,49h,49h,49h,26h ;6
db 41h,42h,44h,48h,70h ;7
db 36h,49h,49h,49h,36h ;8
db 32h,49h,49h,49h,3eh ;9
db 00h,00h,22h,00h,00h ;:
db 00h,01h,22h,00h,00h ;;
db 08h,14h,22h,41h,00h ;<
db 14h,14h,14h,14h,14h ;=
db 00h,41h,22h,14h,08h ;>
db 20h,40h,45h,48h,30h ;?
db 3eh,41h,4dh,4dh,39h ;@
db 1fh,24h,44h,24h,1fh ;A
db 7fh,49h,49h,49h,36h ;B
db 3eh,41h,41h,41h,22h ;C
db 7fh,41h,41h,22h,1ch ;D
db 7fh,49h,49h,49h,41h ;E
db 7fh,48h,48h,48h,40h ;F
db 3eh,41h,41h,45h,26h ;G
db 7fh,08h,08h,08h,7fh ;H
db 00h,41h,7fh,41h,00h ;I
db 42h,41h,41h,7eh,40h ;J
db 7fh,08h,14h,22h,41h ;K
db 7fh,01h,01h,01h,01h ;L
db 7fh,20h,18h,20h,7fh ;M
db 7fh,10h,08h,04h,7fh ;N
db 3eh,41h,41h,41h,3eh ;O
db 7fh,48h,48h,48h,30h ;P
db 3ch,42h,46h,42h,3dh ;Q
db 7fh,48h,4ch,4ah,31h ;R
matrix1: db 32h,49h,49h,49h,26h ;S
db 40h,40h,7fh,40h,40h ;T
db 7eh,01h,01h,01h,7eh ;U
db 78h,06h,01h,06h,78h ;V
db 7fh,02h,0ch,02h,7fh ;W
db 63h,14h,08h,14h,63h ;X
db 60h,10h,0fh,10h,60h ;Y
db 43h,45h,49h,51h,61h ;Z
USING 0 ; register bank zero
cold_start:
mov sp, #(stack-1) ; initialize stack pointer
call initialize ; initialize controller registers
mov p1, #0 ; write zeros to displays
clr clear ;clear display
clr clk
clr row
setb TI
setb ES
mov acc,#07fh
call delay_5mS
top: jnb ri,m1
clr es
mov a,sbuf
clr ri
call setup
setb es
m1: call get_mess ;loads message from eeprom into ram
setb clear
m5: mov char_count,#0
m3: mov col,#6
m4: mov scans,#10
m2: mov memptr,#message
mov a,memptr
add a,char_count
mov memptr,a
call char_cal
call scan_char1
inc memptr
call char_cal
mov count,#5
call scan_char
inc memptr
call char_cal
mov count,#5
call scan_char
inc memptr
mov a,@memptr
cjne a,#'$',m6
jmp m5
m6: call char_cal
mov count,#3
cjne col,#4,m7
m7: jnc m8
call scan_char
m8: djnz scans,m2
djnz col,m4
inc char_count
jmp m3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;
char_cal:
mov a,@memptr
clr c
subb a,#20h
mov b,#5
mul ab
mov b,a
mov c,ov
jc greater255
mov dptr,#matrix
jmp cc1
greater255: mov dptr,#matrix1
inc dptr
cc1: ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;
scan_char1:
mov a,#6
clr c
subb a,col
sd7: jz sd6
inc dptr ;inc dptr to start column
dec a
jmp sd7
sd6:
mov a,col
mov count,a ;load the number of columns to display
dec count
mov a,count
jz sd3 ;display space column only
mov a,b
movc a, @a+dptr ; get character
sd3: mov p1,a
setb row
setb clk
nop
clr clk
clr row
inc dptr
mov a,#60h
call delay
mov a,count
jz sd2
sd1: djnz count,sd4
jmp sd5 ;last column jmp to display space
sd4: mov a,b
movc a, @a+dptr
mov p1,a
setb clk
nop
clr clk
mov a,#60h
call delay
inc dptr
jmp sd1 ;jmp to check if last column
sd5: call char_space
sd2: ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;
char_space: clr a
mov p1,a
setb clk
nop
clr clk
mov a,#60h
call delay
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;
scan_char:
sc1: mov a,b
movc a, @a+dptr
mov p1,a
setb clk
nop
clr clk
mov a,#60h
call delay
inc dptr
djnz count,sc1
call char_space
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
setup:
su1: mov dptr, #menu
call send_string
call getch
call send_char
su2: cjne a,#'s',su3
call store
su3: cjne a,#'d',su1
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
store:
mov a,#0ah
call send_char
mov a,#0dh
call send_char
clr a
mov ADDR_LO,a
get_next_char: call getch
mov zdata,a
call send_char
clr a
call write_byte
inc ADDR_LO
mov a,zdata
cjne a,#024h,get_next_char
mov a,#0ah
call send_char
mov a,#0dh
call send_char
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
get_mess:
mov memptr,#message
clr a
mov ADDR_LO,a
next_char: clr a
call read_random
mov @memptr,a
inc ADDR_LO
inc memptr
cjne a,#024h,next_char
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
getch:
setb es ;enable reception
jnb ri,$ ;wait for key press
clr es
mov a,sbuf
clr ri
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;
initialize:
; Initialize controller registers.
mov PCON, #0 ; initialize power control register
mov IE, #0 ; deactivate all interrupts
mov SCON, #01000000b ; serial port mode one
mov TMOD, #00100001b ; timer one 8-bit auto-reload,
&sp; ; timer zero 16-bit
mov TH1, #BAUD_9600 ; timer one reload value
mov TCON, #01010000b ; start timer one & zero
mov th0,#0b9h
mov tl0,#0afh
setb et0
setb REN ;enable rx int
setb EA ;global int enable
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
send_string:
; Transmit string pointed to by DPTR.
; String may be of any length, but must be null-terminated.
push acc
push dpl
push dph
ss1:
clr a
movc a, @a+dptr ; get character
jz ss2 ; check for terminator
call send_char ; send character
inc dptr ; point to next character
jmp ss1
ss2:
pop dph
pop dpl
pop acc
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
send_char:
; Wait for transmitter to clear, add even parity bit to character
; in accumulator and transmit it. Does not wait for transmitter
; to clear before returning.
jnb TI, $ ; wait here for transmitter to clear
clr TI ; clear transmit flag
push acc ; save char
mov SBUF, a ; load character into transmitter
pop acc ; restore char
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
delay:
push acc
push acc
djnz acc, $ ; 500 uS @ 12 MHz
pop acc
djnz acc, $
pop acc
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
delay_5mS:
; Delay for 5mS times the value in the accumulator.
push acc
push b
mov b, a
ddd:
mov a, #0
call delay ; 1mS
call delay ; 2mS
call delay ; 3mS
call delay ; 4mS
call delay ; 5mS
djnz b, ddd
pop b
pop acc
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
write_byte:
; AT24Cxx Byte Write function.
; Called with programmable address in A, byte address in
; register pair ADDR_HI:ADDR_LO, data in register XDATA.
; Does not wait for write cycle to complete.
; Returns CY set to indicate that the bus is not available
; or that the addressed device failed to acknowledge.
; Destroys A.
call start
jc x49 ; abort if bus not available
rl a ; programmable address to bits 3:1
orl a, #FADDR ; add fixed address
clr acc.0 ; specify write operation
call shout ; send device address
jc x48 ; abort if no acknowledge
mov a, addr_lo ; send low byte of address
call shout ;
jc x48 ; abort if no acknowledge
mov a, zdata ; get data
call shout ; send data
jc x48 ; abort if no acknowledge
clr c ; clear error flag
x48:
call stop
x49:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
read_current:
; AT24Cxx Current Address Read function.
; Called with programmable address in A. Returns data in A.
; Returns CY set to indicate that the bus is not available
; or that the addressed device failed to acknowledge.
call start
jc x45 ; abort if bus not available
rl a ; programmable address to bits 3:1
orl a, #FADDR ; add fixed address
setb acc.0 ; specify read operation
call shout ; send device address
jc x44 ; abort if no acknowledge
call shin ; receive data byte
call NAK ; do not acknowledge byte
clr c ; clear error flag
x44:
call stop
x45:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
read_random:
; AT24Cxx Random Read function.
; Called with programmable address in A, byte address in
; register pair ADDR_HI:ADDR_LO. Returns data in A.
; Returns CY set to indicate that the bus is not available
; or that the addressed device failed to acknowledge.
push b
mov b, a ; save copy of programmable address
; Send dummy write command to set internal address.
call start
jc x47 ; abort if bus not available
rl a ; programmable address to bits 3:1
orl a, #FADDR ; add fixed address
clr acc.0 ; specify write operation
call shout ; send device address
jc x46 ; abort if no acknowledge
mov a, addr_lo ; send low byte of address
call shout ;
jc x46 ; abort if no acknowledge
; Call Current Address Read function.
mov a, b ; get programmable address
call read_current
jmp x47 ; exit
x46:
call stop
x47:
pop b
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
start:
; Send START, defined as high-to-low SDA with SCL high.
; Return with SCL, SDA low.
; Returns CY set if bus is not available.
setb SDA
setb SCL
; Verify bus available.
jnb SDA, x40 ; jump if not high
jnb SCL, x40 ; jump if not high
nop ; enforce setup delay and cycle delay
clr SDA
nop ; enforce hold delay
nop ;
nop ;
nop ;
nop ;
clr SCL
clr c ; clear error flag
jmp x41
x40:
setb c ; set error flag
x41:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
stop:
; Send STOP, defined as low-to-high SDA with SCL high.
; SCL expected low on entry. Return with SCL, SDA high.
clr SDA
nop ; enforce SCL low and data setup
nop
setb SCL
nop ; enforce setup delay
nop ;
nop ;
nop ;
nop ;
setb SDA
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
shout:
; Shift out a byte to the AT24Cxx, most significant bit first.
; SCL, SDA expected low on entry. Return with SCL low.
; Called with data to send in A.
; Returns CY set to indicate failure by slave to acknowledge.
; Destroys A.
push b
mov b, #8 ; bit counter
x42:
rlc a ; move bit into CY
mov SDA, c ; output bit
nop ; enforce SCL low and data setup
setb SCL ; raise clock
nop ; enforce SCL high
nop ;
nop ;
nop ;
clr SCL ; drop clock
djnz b, x42 ; next bit
setb SDA ; release SDA for ACK
nop ; enforce SCL low and tAA
nop ;
setb SCL ; raise ACK clock
nop ; enforce SCL high
nop ;
nop ;
nop ;
mov c, SDA ; get ACK bit
clr SCL ; drop ACK clock
pop b
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
shin:
; Shift in a byte from the AT24Cxx, most significant bit first.
; SCL expected low on entry. Return with SCL low.
; Returns received data byte in A.
setb SDA ; make SDA an input
push b
mov b, #8 ; bit count
x43:
nop ; enforce SCL low and data setup
nop ;
nop ;
setb SCL ; raise clock
nop ; enforce SCL high
nop ;
mov c, SDA ; input bit
rlc a ; move bit into byte
clr SCL ; drop clock
djnz b, x43 ; next bit
pop b
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
ACK:
; Clock out an acknowledge bit (low).
; SCL expected low on entry. Return with SCL, SDA low.
clr SDA ; ACK bit
nop ; enforce SCL low and data setup
nop ;
setb SCL ; raise clock
nop ; enforce SCL high
nop ;
nop ;
nop ;
clr SCL ; drop clock
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;
NAK:
; Clock out a negative acknowledge bit (high).
; SCL expected low on entry. Return with SCL low, SDA high.
setb SDA ; NAK bit
nop ; enforce SCL low and data setup
nop ;
setb SCL ; raise clock
nop ; enforce SCL high
nop ;
nop ;
nop ;
clr SCL ; drop clock
ret
END
Comment
-
một số điểm mới trong topic này
các pác còn j thắc mặc hay bổ sung cho mạch CPU ko
em chuyển qua phần làm khung bảng và kết nối các module với nhau
ai còn j thắc mắc thì có thể gửi mail cho em em sẽ trả lời sớm nhất có thể
h em xin trình bày lại phần mạch CPU
+em vẽ mạch có dùng USB để giao tiếp nên có thể có pác ko mun dùng USB thì dùng RS232 ,mạch em ko vẽ mạch RS232 vì đã có mạch USB rồi nên mun thêm thì làm mạch ngoài cắm jac 3 day vào là dc (ai cần thì nói em cho mạch nguyên lý hợp với cái CPU của em)
+về phần Ram cái này ko cần thiết khi làm bảng nhỏ 8x16 nhưng ngược lại nó rất cần khi ta dùng cho bảng 16x64 trở lên nhằm tăng tốc độ chip 89S52 ,mạch này cũng làm ngoài nếu ai cần mach nguyên lý thì bảo em em gửi cho (nếu cần cả file cho PCB thì ok lun)
+cũng như Ram em ko vẽ mạch đo nhiệt vì nó ko cần thiết nên em ko vẽ vào mà dùng nó thì cũng tốn chân của vdk nên cái này tạm thời ko dùng (cái này cũng có mạch nguyên lý lun ai càn em send cho lun nhá)
+mạch to cũng vì con 154 nên cũng ko nhỏ hơn dc cái này cho wa module sẽ ko tiện vì nó sẽ làm mạch to thêm nên tạm cho nó ở đây
pin cho con DS1307 trước em vẽ nhỏ wa nên em bổ sung lại kích thước chính xác chút (cái này pác Xuan giúp em) và em thêm phần nên cho mạch đẹp hơn pro hơn
sau đây em cho các pác xem mạch em mới chỉnh sửa lại cũng khá ok rồi có thể đặt lun
kích thước mạch như sau:
module led là 12X6 cm
CPU là 6X9 cm
đây là bản thiết kế:
đây là ảnh toàn mạch có linh kiện:
đây mạch in lớp trên
đây là mạch in lớp dưới
và mạch của 1 công ty quảng cáo em tìm trên mạng xem nó cũng khá pro và đa năng
so với mạch của em thì hơn kém tí vì nó là để cho các pác thực hành còn cái này của cong ty nên phải pro hơn là điều tất nhiên
chúc vui!!!8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
-
Nguyên văn bởi hoangphat Xem bài viết+em vẽ mạch có dùng USB để giao tiếp nên có thể có pác ko mun dùng USB thì dùng RS232 ,mạch em ko vẽ mạch RS232 vì đã có mạch USB rồi nên mun thêm thì làm mạch ngoài cắm jac 3 day vào là dc (ai cần thì nói em cho mạch nguyên lý hợp với cái CPU của em)
phải là (TXD , RXD 5V mass) ma` cái này thì giống như chân nạp philip trong cpu rồi
Cái giao tiếp USB ni tui chưa biết ne`
Cái này mất bao nhiêu chân VDK để giao tiếp thế bác
Bác có tài liệu về phần giao tiếp usb này thì sent cho t nghiên cứu với + bác giúp t nua~ nhé. hehe
Nguyên văn bởi hoangphat Xem bài viếtok rồi có thể đặt lun
kích thước mạch như sau:
module led là 12X6 cm
CPU là 6X9 cmEmail :
Comment
-
giao tiếp PC qua USB em dùng chip ATMEGA8 nạp ct vào và cài driver vào là chạy dc(cái này các pác có thể nhờ người ta nạp giúp hoặc có thể call em, em nạp rồi gửi cho các pác)
nó nối 2 chân vào cổng nối tiếp của 89S52(RXD,TXD)
cái cổng 4 chân là RXD -TXD - +5V-mass là cổng nạp của chip philip
cái cổng 6 chân là nạp ISP em có ghi trên PCB đấy
cổng 16 chân nối ra module 8X hay 16X
cổng out put 6 chân nối vào module để truyền data 1 màu, 2 màu hoặc 3 màu
tất cả đều có đầy đủ h ngồi viết code cho cái CPU là ok
ai cần call là có8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
-
code liên quan (giao tiếp I2C)
phần cứu thế là ok rồi nhá em chuyên sang phần chương trình cho nó (phần này là phần mở ko có giới hạn)
trước các pác đã có code để chạy cố định cũng ok rồi h em post lun mấy bài liên quan để pa kon ngâm cứu,hiện em đang tìm hỉu và ráp nó thành 1 chương trình có thể áp dụng nó vào code của mình
nếu dc em sẽ ráp vào code 8x64 bản cũ để ngâm cứu sau khi thành công thì em post cho các pác ngâm cứu
phần tài liệu pác Xuân sẽ giúp em tìm .em sẽ tìm hỉu nó sáu đó sẽ viết ra 1 ct để các pác ngâm cứu
sau đây là ct bảng số sử dụng rom 24C64 chạy ok rồi cái này em đang phát triển sang giao tiếp pc để áp dụng nó vào led matrix
Code:INCLUDE 89C52.MC SDA BIT P1.0 SCL BIT P1.1 EM BIT P2.0 CLOCK BIT P2.1 LATH BIT P2.2 DULIEU EQU 20H DEMBIT EQU 21H DEMBYTE EQU 22H TAM1 DATA 23H TAM2 DATA 24H TAM3 DATA 25H TAM4 DATA 26H TAM5 DATA 27H TAM6 DATA 28H TAM7 DATA 29H TAM8 DATA 2AH TAM9 DATA 2BH TAM10 DATA 2CH TAM11 DATA 2DH TAM12 DATA 2EH TAM13 DATA 30H ERROR BIT 7FH ;************************************************** ORG 0000H LJMP MAIN ORG 0030H ;************************************************** MAIN: MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH MOV R0,#0 MOV R1,#0 MOV R2,#0 MOV R3,#0 MOV R4,#0 MOV R5,#0 MOV R6,#0 MOV R7,#0 MOV TAM1,#0 MOV TAM2,#0 MOV TAM3,#0 MOV TAM4,#0 MOV TAM5,#0 MOV TAM6,#0 MOV TAM7,#0 MOV TAM8,#0 MOV TAM9,#0 MOV TAM10,#0 MOV TAM11,#0 MOV TAM12,#0 MOV TAM13,#0 ;************************************************** PRO: ACALL READ CLR P2.3 CLR P2.4 CLR P2.5 CLR P2.6 CLR P2.7 PRO1: ACALL SEND ACALL INT_0 ACALL INT_1 CJNE R0,#0,NHAY CJNE R6,#06,PRO1 ACALL QUIDOI ACALL WRITE MOV R6,#0 ACALL DELAYR ACALL DELAYR ACALL DELAYR ACALL DELAYR ACALL DELAYR ACALL DELAYR SJMP PRO1 NHAY: CJNE R0,#01,TIEP1 SETB P2.3 ACALL DELAYR CLR P2.3 ACALL DELAYR ACALL DELAYR TIEP1: CJNE R0,#02,TIEP2 SETB P2.4 ACALL DELAYR CLR P2.4 ACALL DELAYR ACALL DELAYR TIEP2: CJNE R0,#03,TIEP3 SETB P2.5 ACALL DELAYR CLR P2.5 ACALL DELAYR ACALL DELAYR TIEP3: CJNE R0,#04,TIEP4 SETB P2.6 ACALL DELAYR CLR P2.6 ACALL DELAYR ACALL DELAYR TIEP4: CJNE R0,#05,TIEP SETB P2.7 ACALL DELAYR CLR P2.7 ACALL DELAYR ACALL DELAYR TIEP: ACALL QUIDOI SJMP PRO1 ;************************************************** VONG: MOV TAM11,#08 VONG1: RRC A MOV EM,C CLR CLOCK NOP NOP SETB CLOCK DJNZ TAM11,VONG1 RET ;************************************************** DELAY: NOP RET ;************************************************** SCL_HIGH: SETB SCL ACALL DELAY RET ;************************************************** SCL_LOW: CLR SCL ACALL DELAY RET ;************************************************** I2C_START: SETB SDA SETB SCL CLR SDA ACALL DELAY CLR SCL SETB SDA RET ;************************************************** I2C_STOP: CLR SDA SETB SCL ACALL DELAY SETB SDA RET ;************************************************** GOI1BYTE: MOV DEMBIT,#8 ;Bit MSB duoc goi di truoc tien MOV A,DULIEU LOOP1: RLC A MOV SDA,C ACALL DELAY ACALL SCL_HIGH ACALL SCL_LOW DJNZ DEMBIT,LOOP1 SETB SDA ;SDA bi keo xuong thap khi 1 byte duoc gui xong. ACALL SCL_HIGH MOV C,SDA ;Neu ERROR = 1 thi viec truyen bi loi,can phai goi lenh STOP,neu = 0 thi OK MOV ERROR,C ACALL SCL_LOW RET ;************************************************** NHAN1BYTE: MOV DEMBIT,#8 SETB SDA LOOP3: ACALL SCL_HIGH ACALL DELAY MOV C,SDA ACALL SCL_LOW RLC A DJNZ DEMBIT,LOOP3 MOV DULIEU,A CLR SDA ACALL DELAY ACALL SCL_HIGH ACALL SCL_LOW SETB SDA RET ;************************************************** INT_0: JB P3.2,ENTER1 CJNE R4,#01,DKIEN RET DKIEN: INC R1 CJNE R1,#200,DKIEN1 AJMP DKIEN2 DKIEN1: JNB P3.2,DKIEN RET DKIEN2: MOV R1,#00 MOV R4,#01 INC R0 INC R6 CJNE R0,#06,ENTER MOV R0,#0 ENTER: RET ENTER1: MOV R4,#00 RET ;************************************************** INT_1: JB P3.3,LAP5 KTRA: INC R2 CJNE R2,#250,KTRA1 AJMP KTRA2 KTRA1: JNB P3.3,KTRA RET KTRA2: MOV R2,#00 MOV R7,#01 CJNE R0,#01,LAP1 INC TAM5 MOV R5,TAM5 CJNE R5,#0BH,LAP1 MOV TAM5,#0 LAP1: CJNE R0,#02,LAP2 INC TAM4 MOV R5,TAM4 CJNE R5,#0BH,LAP2 MOV TAM4,#0 LAP2: CJNE R0,#03,LAP3 INC TAM3 MOV R5,TAM3 CJNE R5,#0BH,LAP3 MOV TAM3,#0 LAP3: CJNE R0,#04,LAP4 INC TAM2 MOV R5,TAM2 CJNE R5,#0BH,LAP4 MOV TAM2,#0 LAP4: CJNE R0,#05,LAP5 INC TAM1 MOV R5,TAM1 CJNE R5,#0BH,LAP5 MOV TAM1,#0 LAP5: RET ;************************************************** DELAYR: MOV TAM13,#255 VE1: MOV TAM12,#255 DJNZ TAM12,$ DJNZ TAM13,VE1 RET ;************************************************** WRITE: ACALL I2C_START MOV DULIEU,#10100000B ACALL GOI1BYTE MOV DULIEU,#00000001B ACALL GOI1BYTE MOV DULIEU,#00000000B ACALL GOI1BYTE MOV DULIEU,TAM6 ACALL GOI1BYTE MOV DULIEU,TAM7 ACALL GOI1BYTE MOV DULIEU,TAM8 ACALL GOI1BYTE MOV DULIEU,TAM9 ACALL GOI1BYTE MOV DULIEU,TAM10 ACALL GOI1BYTE ACALL I2C_STOP RET ;************************************************** READ: ACALL I2C_START MOV DULIEU,#10100000B ACALL GOI1BYTE MOV DULIEU,#00000001B ACALL GOI1BYTE MOV DULIEU,#00000000B ACALL GOI1BYTE ACALL I2C_START MOV DULIEU,#10100001B ACALL GOI1BYTE ACALL NHAN1BYTE MOV TAM6,DULIEU ACALL NHAN1BYTE MOV TAM7,DULIEU ACALL NHAN1BYTE MOV TAM8,DULIEU ACALL NHAN1BYTE MOV TAM9,DULIEU ACALL NHAN1BYTE MOV TAM10,DULIEU ACALL I2C_STOP RET ;************************************************** QUIDOI: MOV DPTR,#BANGSO MOV A,TAM1 MOVC A,@A+DPTR MOV TAM6,A MOV A,TAM2 MOVC A,@A+DPTR MOV TAM7,A MOV A,TAM3 MOVC A,@A+DPTR MOV TAM8,A MOV A,TAM4 MOVC A,@A+DPTR MOV TAM9,A MOV A,TAM5 MOVC A,@A+DPTR MOV TAM10,A RET BANGSO: DB 11111101B;11000000B0 DB 01100001B;11111001B1 DB 11011011B;10100100B2 DB 11110011B;10110000B3 DB 01100111B;10011001B4 DB 10110111B;10010010B5 DB 10111111B;10000010B6 DB 11100001B;11111000B7 DB 11111111B;10000000B8 DB 11110111B;10010000B9 DB 00000000B;11111111boff ;************************************************** SEND: MOV A,TAM6 ACALL VONG MOV A,TAM7 ACALL VONG MOV A,TAM8 ACALL VONG MOV A,TAM9 ACALL VONG MOV A,TAM10 ACALL VONG CLR LATH NOP NOP SETB LATH RET END
Good luck!!!8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 12:55 -
-
Trả lời cho Hỏi về test hipot cao ápbởi nguyendinhvanCách nghĩ của bạn là theo duy tâm thôi. Còn trong công việc thì phải theo duy lý.
Bạn vào goggle và gõ từ : tiêu chuẩn an toàn cách điện.
Bạn sẽ thấy vô vàn các quy định, VN cũng có , quốc tế cũng có. Mỗi vùng , mỗi khu vực,...-
Channel: Điện tử dành cho người mới bắt đầu
02-11-2024, 20:04 -
-
bởi lamvu0677Chào mọi người, ai làm về điện, đặc biệt biến áp xung, mâý con nho nhỏ gắn vào mạch nguồn, cho e hỏi tí ą, e cũng làm trong ty về biển áp thì đo kiểm thành phẩm sẽ kiểm cao áp, tức là kiểm xem có phóng điện giữa các cuộn dây với...
-
Channel: Điện tử dành cho người mới bắt đầu
01-11-2024, 21:05 -
Comment