我只知道在nc3000中的一些串口调用的子程序,具体3B,3C,3D,3E,3F的用法不是很清楚,不知对你有没有用.
;打开串口通讯
OpenPort
LDA $0436
ORA #$08
STA $18
STA $0436
LDA #$FF
STA $60
LDA $3D
AND #$FC
ORA #$02
STA $3D
LDA #$20
STA $3C
LDA #$02
STA $3D
LDA $3D
AND #$FC
ORA #$01
STA $3D
LDA #$00
STA $3B
LDA $3D
AND #$FC
ORA #$00
STA $3D
LDA $3D
ORA #$04
STA $3D
PHP
PHA
LDA $3D
AND #$FC
ORA #$01
STA $3D
PLA
PLP
LDA #$30
STA $3D
NOP
NOP
NOP
LDA $3D
AND #$FC
ORA #$00
STA $3D
LDA $3B
CMP #$60
BEQ e308B
LDA $3D
AND #$FB
STA $3D
NOP
NOP
NOP
NOP
LDA $3D
ORA #$04
STA $3D
LDY #$04
e3075:
LDX #$C8
e3077:
JSR $E0BA ;延时
LDA $3B
CMP #$60
BEQ e308B
DEX
BNE e3077
DEY
BNE e3075
e308B:
LDA $3D
AND #$FC
ORA #$00
STA $3D
LDA #$23
STA $3B
LDA $3D
AND #$FC
ORA #$01
STA $3D
LDA #$01 ;等于01时以波特率115200打开,等于00时以波特率230400打开,等于0f时以波特率921600打开
STA $3A
LDA $3D
AND #$FC
ORA #$00
STA $3D
LDA #$02
STA $3C
LDA #$80
STA $17
rts
;关闭串口通讯
ClosePort
LDA $3D
AND #$FC
ORA #$00
STA $3D
LDA $3D
AND #$FB
STA $3D
LDA $3D
AND #$FC
ORA #$02
STA $3D
LDA #$00
STA $3C
RTS
;发送一个字节
SendOneByte
PHA
LDA $3D
AND #$FC
ORA #$00
STA $3D
SendOneByteL1
LDA $3B
AND #$60
CMP #$60
BNE SendOneByteL1
PLA
STA $3A
RTS
;接收一个字节
ReceiveOneByte
LDA $3D
AND #$FC
ORA #$00
STA $3D
ReceiveOneBytel1
LDA $3C
AND #$10
BEQ ReceiveOneBytel1
LDA $3A
RTS
多谢楼上的回复.汇编代码我也有,但是就是看不懂它的含义.. 这断代码用于以115200bps打开串口:
.include "f:\fishyuxuan\6502simulator\GGV\NC2600_head.65s"
open_port:
enable_pll
switch_bank 0
LDA #$01
STA LCReg
Disable_irda
clear_FIFO
JSR wait_io_ok
switch_BK 1
LDA #$01
STA BSReg
switch_BK 0
LDA #$00
STA MSReg
enable_UART
RTS
wait_io_ok:
JSR int_count
LDA #$00
STA $0FAA
local1: enable_UCE
switch_BK 0
LDA LCReg
CMP #$60
BEQ local2
JSR dec_count
BNE local1
LDA #$01
STA $0FAA
local2 RTS
int_count:
LDA #$00
STA $0FC9
LDA #$10
STA $0FCA
RTS
dec_count:
LDA $0FC9
BNE dec_local1
DEC $0FCA
dec_local1:
DEC $0FC9
LDA $0FCA
CMP #$00
BNE end_count
LDA $0FC9
CMP #$00
end_count: RTS
;---------------UART & GPIO------------------------
bruiequ 3ah
uart_BKequ brui+3
RHRegequ brui
THRegequ brui
LSRegequ brui+1
LCRegequ brui+1
MCRegequ brui+2
IVRegequ brui+3
BSRegequ brui
IRCRegequ brui+1
MSRegequ brui+2
FCRegequ brui+3
CStopequ brui
CStartequ brui+1
TMRegequ brui+2
IERegequ brui+3
GPCRegequ brui
P05equ brui+2
;-----------------------------------------------;
P06equ brui+2
P07equ brui+3
P08equ brui+4
P08Direqu brui+4
P08ICequ brui+5
;---------------RTC SIF-------------------------
IndexAddrReg equ 3eh
RIRegequ IndexAddrReg
IndexDataReg equ 3fh
RTCValequ IndexDataReg
RCReg0equ IndexDataReg
RCReg1equ IndexDataReg
;---------------常用I/O控制或状态位-------------------------
io_hiie_bit equ 10000000b ;ptype1
io_dir42_bit equ 10000000b ;ptype0
io_hoie_bit equ 01000000b ;ptype1
io_dir43_bit equ 01000000b ;ptype0
io_dir316_bit equ 00100000b
io_nmioff_bit equ 00010000b
io_exie0_bit equ 00001000b
io_exie1_bit equ 00000100b
io_tmBie_bit equ 00000010b
io_tmAie_bit equ 00000001b
io_dir423_bit equ 11000000b ;write protect
io_int_ibf_bit equ 10000000b
io_int_obf_bit equ 01000000b
io_int_tm1_bit equ 00100000b
io_int_tm0_bit equ 00010000b
io_int_tb_bit equ 00001000b
io_int_eint_bit equ 00000100b
io_int_tmB_bit equ 00000010b
io_int_tmA_bit equ 00000001b
io_lcd_diction equ 00010000b
io_lcd_enb_bit equ 00001000b ;mask DI
io_p4_4_7_dir equ 11010000b ;for port44-port47 out(io_port_config) wyj 2001.10.17
io_p407_dir_bit equ 10000000b ;for port47 out
io_p406_dir_bit equ 01000000b ;for port46 out
io_p405_dir_bit equ 00100000b ;for port45 out
io_p404_dir_bit equ 00010000b ;for port44 out
io_onen_bit equ 00000100b
io_ROA_bit equ 10000000b ;RAM/ROM (io_bios_bsw)
io_btd_bit equ 00100000b ;
io_p401_dir_bit equ 00010000b ;for port41 out (io_bios_bsw)
io_onoff_pad_bit equ 00000001b ;use p30, no dir set, as input
io_adi_bit equ 10000000b
io_rtcoff_bit equ 01000000b
io_bout_bit equ 00100000b
io_shdnz_bit equ 00001000b
io_save_bit equ 00000100b
io_vsl1_bit equ 00000010b
io_vsl0_bit equ 00000001b
io_sh_bit equ 00001000b
io_rec_bit equ 00001000b ;1 for rec 0 for speak
io_bcp_bit equ 00100000b ;1 generate NMI 低电压 (io_general_status)
io_lcdir0_bit equ 00000000b ;b4 (io_clock_ctrl)
io_lcdir1_bit equ 00000000b ;b0 (io_lcd_ctrl)
io_xtype_bit equ 00000111b ;XTYPE=7 (io_port_config)
io_xm0cf_bit equ 00001011b ;Vol=0,ROA=0,80h--0ffh
;io_xm1cf_bit equ 00011001b ;Vol=1,ROA=0,80h--0ffh nc880
io_xm1cf_bit equ 00000011b ;Vol=0,ROA=1,80h--0ffh nc2000
;---------------Uart 状态常量-------------------------
RxRDY equ 1
OE equ 2
PE equ 4
FE equ 8
TxRDY equ 32
TxEMT equ 64
switch_BK macro val
php
pha
lda uart_BK
and #0fch
ora #val
sta uart_BK
pla
plp
endm
;------------------------------------IrDA macro----------------
DISABLE_TBASE macro
pha
lda zp_general_ctrl
and #11110000b
sta io_general_ctrl
pla
endm
ENABLE_TBASE macro
pha
lda zp_general_ctrl
sta io_general_ctrl
pla
endm
as_primary macro
lda IrdaModeMark
and #0cfh
ora #10h
sta IrdaModeMark
endm
as_secondary macro
lda IrdaModeMark
and #0cfh
ora #20h
sta IrdaModeMark
endm
not_assign macro
lda IrdaModeMark
and #0cfh
sta IrdaModeMark
endm
set_simulation macro
lda FoundDevice
sta SimuMark
endm
set_PorF macro
ora #10h
endm
set_cmdmacro
ora #1
endm
reset_watchdogmacro
lda #0
sta watch_dog_timer_flag
endm
clear_idlesec macro
lda #0
sta idlesec
endm
check_key macro local,local1
lda key
and #80h
beq local
lda key
and #7fh
sta key
jmp local1
local:lda #0
local1:
endm
clear_length macro
lda #0
sta RecvLength
sta RecvLength+1
endm
set_recv_status macro
lda IrdaComStatus
and #0fh
ora #1
sta IrdaComStatus
endm
set_send_status macro
lda IrdaComStatus
and #0fh
ora #2
sta IrdaComStatus
endm
set_retry1 macro
lda #1
sta RetryCount
endm
set_retry macro
lda #5
sta RetryCount
reset_watchdog
endm
set_callmark macro val
lda #val
sta IrdaCallMark
endm
switch_bank macro val
lda uart_BK
and #0fch
ora #val
sta uart_BK
endm
Enable_Irdamacro
lm IndexAddrReg,#P6DInx;P64 output 0
lda zp_port6_dir
ora #10h
sta IndexDataReg
sta zp_port6_dir
lda zp_io_port6
and #11101111b
sta io_port6
sta zp_io_port6
endm
Disable_Irdamacro
lm IndexAddrReg,#P6DInx
lda zp_port6_dir
ora #10h ;p64 output 1
sta IndexDataReg
sta zp_port6_dir
lda zp_io_port6
ora #10h
sta io_port6
sta zp_io_port6
switch_BK 3
lda #80h
sta GPCReg
sta P05
endm
enable_UART macro
switch_BK 2
lda #00100000b
sta TMReg
endm
disable_UART macro
switch_BK 2
lda #0
sta TMReg
endm
CLEAR_BRUI macro
switch_BK 0
lda IVReg
and #0fbh
sta IVReg ;enable uart clock
endm
;;;;;;;;;;;;;;;;;;
enable_UCE macro
switch_BK 0
lda #04h
sta IVReg
endm
disable_UCE macro
switch_BK 0
lda #00h
sta IVReg
endm
clear_FIFO macro
switch_BK 1
lda #30h
sta FCReg
endm
;;;;;;;;;;;;;;;;;;
enable_PLL macro
lda uart_BK
and #0fch
sta uart_BK
lda #4
sta uart_BK
endm
disable_PLL macro
lda uart_BK
and #0fch
sta uart_BK
lda #1
sta uart_BK
lda #23h
sta IRCReg
endm
enable_2Hz macro
lda #10
sta RIReg
lda RTC_IER_map
ora #1
sta RCReg0
sta RTC_IER_map
endm
enable_Alarm macro
lda #10
sta RIReg
lda RTC_IER_map
ora #2
sta RCReg0
sta RTC_IER_map
endm
enable_Samp64 macro
lda #10
sta RIReg
lda RTC_IER_map
ora #70h ; 15.6 ms sample interruption
sta RCReg0
sta RTC_IER_map
endm
enable_Samp1k macro
lda #10
sta RIReg
lda RTC_IER_map
ora #0b0h ; 15.6 ms sample interruption
sta RCReg0
sta RTC_IER_map
endm
disable_2Hz macro
lda #10
sta RIReg
lda RTC_IER_map
and #0feh
sta RCReg0
sta RTC_IER_map
endm
disable_Alarm macro
lda #10
sta RIReg
lda RTC_IER_map
and #0fdh
sta RCReg0
sta RTC_IER_map
endm
disable_Sample macro
lda #10
sta RIReg
lda RTC_IER_map
and #0fh
sta RCReg0
sta RTC_IER_map
endm
clear_2Hz macro
lda #11
sta RIReg
lda #1
sta RCReg1
endm
clear_Alarm macro
lda #11
sta RIReg
lda #2
sta RCReg1
endm
clear_Sample macro
lda #11
sta RIReg
lda #4
sta RCReg1
endm
get_Random macro
lda #4
sta RIReg
lda RTCVal
endm
set_TempByte macro val
lda #val
sta TempByte
endm
sendmacro local
pha
local:nop
lda LSReg
and #TxRDY
beq local
pla
sta THReg
endm
receivemacro local,local1
local:lda LSReg
and #RxRDY
bne local1
lda TimerMark
bne local
local1:lda RHReg
endm
start_flash macro
lda #1
sta IconFlashFlag
endm
stop_flash macro
lda #0
sta IconFlashFlag
endm
;----------------------------------end IrDA macro--------------
;---------------UART & GPIO------------------------
bruiequ 3ah
uart_BKequ brui+3
RHRegequ brui
THRegequ brui
LSRegequ brui+1
LCRegequ brui+1
MCRegequ brui+2
IVRegequ brui+3
BSRegequ brui
IRCRegequ brui+1
MSRegequ brui+2
FCRegequ brui+3
CStopequ brui
CStartequ brui+1
TMRegequ brui+2
IERegequ brui+3
GPCRegequ brui
P05equ brui+2
上面的代码是在论坛上搜的,可是我看不懂.
比如:IRCRegequ brui+1是不是IRCReg的值为brui+1??
还有IRCReg是什么意思??
我学51单片机的串口好象没那么复杂的.
希望大家讲解一下,谢谢.
代码能用就行了,没必要追究每个register的用法。 知道单片机的工作方式可以加深对编程的了解.
知道每个register的用法和每一位的作用,就可以灵活应用与程序上了.
打开红外传输的中断是???nc3k
疑问,WQX 串口使用
3A,3B,3C,3D,3E,3F其中$3A是数据缓冲
那么$3B的7位分别控制什么?
3C,3D,3E,3F呢??
页:
[1]