; CW keyer with MC68HC705K1 microcontroller ; ; written by: Didier Juges, December 1992 ; ; MC68HC05K1 Equates ; pa equ $00 ; Port A byte address PA0 equ 0 ; Port A bit 0 PA1 equ 1 ; Port A bit 1 PA2 equ 2 ; Port A bit 2 PA3 equ 3 ; Port A bit 3 PA4 equ 4 ; Port A bit 4 PA5 equ 5 ; Port A bit 5 PA6 equ 6 ; Port A bit 6 PA7 equ 7 ; Port A bit 7 ; pb equ $01 ; Port B byte address PB0 equ 0 ; Port B bit 0 PB1 equ 1 ; Port B bit 1 ; ddra equ $04 ; Port A Data Direction Register ; ddrb equ $05 ; Port B Data Direction Register ; TCSR equ $08 ; Timer Status and Control Register RT0 equ 0 ; Real-Time Interrupt Rate Select bit 0 RT1 equ 1 ; Real-Time Interrupt Rate Select bit 1 RTIFR equ 2 ; Real-Time Interrupt Flag Reset TOFR equ 3 ; Timer Overflow Flag Reset RTIE equ 4 ; Real-Time Interrupt Enable TOIE equ 5 ; Timer Overflow Interrupt Enable RTIF equ 6 ; Real-Time Interrupt Flag TOF equ 7 ; Timer Overflow Flag ; TCR equ $09 ; Timer-Counter Register ; ISCR equ $0A ; Interrupt Status and Control Register IRQR equ 1 ; Interrupt Request Reset IRQF equ 3 ; External Interrupt Request Flag IRQE equ 7 ; External Interrupt Request Enable ; PEBSR equ $0E ; Personality EPROM Bit Select Register ; PESCR equ $0F ; Personality EPROM Status and Control Register PEPRZF equ 0 ; Personality EPROM Row Zero Flag PEPGM equ 5 ; Personality EPROM Program Control PEDATA equ 7 ; Personality EPROM Data ; pdra equ $10 ; Pull-Down Register Port A (Write-Only) ; pdrb equ $11 ; Pull-Down Register Port B (Write-Only) ; MOR equ $17 ; Mask Option Register (EPROM byte) COPEN equ 0 ; COP Watchdog Enable LEVEL equ 1 ; External Interrupt Sensitivity PIRQ equ 2 ; Port A Interrupt Function Enable LVRE equ 3 ; Low Voltage Reset Enable SWAIT equ 4 ; STOP conversion to WAIT RC equ 5 ; RC Oscillator select PIN3 equ 6 ; Three-Pin RC Oscillator Select SWPDI equ 7 ; Software Pull-Down Inhibit ; EPROG equ $18 ; EPROM Programming Control Register EPGM equ 0 ; EPROM Programming MPGM equ 1 ; Mask Option Register Programming ELAT equ 2 ; EPROM Bus Latch ; COPR equ $3F0 ; COP Reset Register ; ; RAMStart equ $00E0 ; Start of on chip RAM ROMStart equ $0200 ; Start of on chip ROM/EPROM ROMEnd equ $03EF ; End of on chip ROM/EPROM Vectors equ $03F8 ; Start of Reset/Interrupt vectors *---------------------------------* * equates *---------------------------------* initspeed equ 40 ; initial speed setting chgspd equ PA4 out equ PA7 *---------------------------------* * Mask Option Register selected * ========================= ======== * 7: software pull down enabled | | * 6: 2 pin oscillator | | * 5: external RC oscillator | X | * 4: STOP instruction not converted to wait | | * 3: low voltage reset disabled | X | * 2: Port A interrupts disabled | | * 1: ext IRQ edge-triggered only | | * 0: COP watchdog disabled | | *---------------------------------* org MOR fcb %00101000 *---------------------------------* * disable watchdog *---------------------------------* * org COPR * fcb $00 ; disable COP *---------------------------------* * variables *---------------------------------* org RAMStart speed rmb 1 tempa rmb 1 *---------------------------------* * program starts here *---------------------------------* org ROMStart reset lda #initspeed sta speed * set up registers clr ddra ; all PA as inputs bset 7,pa ; except PA7 bclr 7,pa lda #%00001000 sta pdra ; enable Port A pull-down transistors, except PA3 clr ddrb ; all port B as inputs clr pdrb ; enable Port B pull-down transistors lda #%00010011 sta ISCR ; enable ext interrupts, timer set to 65.5mS @ 4MHz sei *-------------------------------------------* * main loop * * dash = pin 8 = 3,pa * dot = pin 4 = IRQ * out = pin 12 = 7,pa * chgspd = pin 9 = 4,pa *-------------------------------------------* * main equ * brset 4,pa,chspeed ; check if speed needs to be changed brset 3,pa,main1 ; if not dash, branch to check dot bsr dash ; dash, then do dash main1 bih main2 ; if not dash, branch to check dot bsr dot ; dot, then do dot main2 bra main * *---------------------------------------* dot equ * ; dot routine *---------------------------------------* bset 7,pa ; activate transmitter bsr delay bclr 7,pa ; desactivate transmitter bsr delay rts * *---------------------------------------* dash equ * ; dash routine *---------------------------------------* bset 7,pa ; activate transmitter bsr delay bsr delay bsr delay bclr 7,pa ; deactivate transmitter bsr delay rts * *-------------------------------------------* chspeed equ * ; speed adjust *-------------------------------------------* bil spdup brclr 3,pa,spdwn jmp main1 spdup equ * lda speed lsra lsra lsra lsra inca sta tempa lda speed sub tempa sta speed bset 7,pa ; turn on transmitter jsr delay bclr 7,pa ; turn off transmitter jsr delay jmp main1 * spdwn equ * lda speed lsra lsra lsra lsra inca add speed sta speed bset 7,pa ; activate transmitter jsr delay bclr 7,pa ; turn off transmitter jsr delay jmp main1 * *-------------------------------------------* * delay - delays for a time function of * the value stored in A * total delay = A * (256*(decx+bne)+clrx+deca+bne) * = A * 1545 cycles * @ 4MHz, cycle time = 0.5uS * so delay = A * 0.77mS *-------------------------------------------* * delay equ * lda speed del1 clrx ; (3) del2 decx ; (3) bne del2 ; (3) deca ; (3) bne del1 ; (3) rts * Tint rti EXTint rti SWIint rti * *------------------------------* * Vectors *------------------------------* org Vectors fdb Tint fdb EXTint fdb SWIint fdb reset