MC68705R3S Assembly Language Problem

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MC68705R3S Assembly Language Problem

Jump to solution
2,147 Views
TrevJ
Contributor II

Hi,

I'm trying to use some old MC68705R3S microcontrollers for a project for the local Amateur Radio Club, but am having problems getting any code to work properly.  The following code will only work if I replace the call to DELAY22 with WAIT1MS and even then the actual delay time is different on different chips.  Any help will be greatly appreciated.

Best Regards

Trev Jackson

 

0001   0000                 .msfirst
0002   0000             
0003   0000             porta        .equ    $0000    ; port A data register
0004   0000             portb        .equ    $0001    ; port B data register
0005   0000             portc        .equ    $0002    ; port C data register
0006   0000             portd        .equ    $0003    ; port D data register
0007   0000             ddra        .equ    $0004    ; port A data direction register
0008   0000             ddrb        .equ    $0005    ; port B data direction register
0009   0000             ddrc        .equ    $0006    ; port C data direction register
0010   0000             
0011   0000             ;********User RAM (128 Bytes) starts at address $010*********
0012   0000             
0013   0000             temp1        .equ    $010
0014   0000             
0015   0000             ;***************************************************************
0016   0100                     .org $100        ; start of 3640 BYTES user EPROM area
0017   0100             ;***************************************************************
0018   0100             
0019   0100             ;***************************************************************
0020   0100             ; short delays
0021   0100             
0022   0100 9D          DELAY22:    nop    ;22uS
0023   0101 9D          DELAY20:    nop    ;20uS
0024   0102 9D          DELAY18:    nop    ;18uS    
0025   0103 9D          DELAY16:    nop    ;16uS
0026   0104 81          DELAY14:    rts    ;
0027   0105             
0028   0105             ;***************************************************************
0029   0105             ; Wait1ms-- Waits here for 1ms
0030   0105             
0031   0105             WAIT1MS:
0032   0105 BF 10               stx     temp1        ; 6uS
0033   0107 BE 78               ldx    120        ; 2uS
0034   0109 5A          DB3B:   decx            ; 4uS
0035   010A 26 FD               bne     DB3B        ; 4uS
0036   010C 9D              nop            ; 2us
0037   010D 9D              nop            ; 2us
0038   010E 9D              nop            ; 2us
0039   010F 9D              nop            ; 2us
0040   0110 BE 10           ldx    temp1        ; 5uS
0041   0112 BE 10               ldx     temp1        ; 5uS
0042   0114 81                  rts            ; 6uS   (1000uS)
0043   0115             
0044   0115             ;***************************************************************
0045   0115             ; main code
0046   0115             
0047   0115             
0048   0115             START:
0049   0115 A6 FF               lda    #$FF            ;port A as outputs
0050   0117 B7 04           sta    ddra
0051   0119 B7 05           sta    ddrb            ;port B as outputs
0052   011B B7 06               sta     ddrc            ;port C as outputs
0053   011D 3F 00           clr    porta        ;data=$00 RW=0 RS=0 E=0
0054   011F 3F 01           clr    portb
0055   0121 3F 02           clr    portc
0056   0123             LED1
0057   0123 10 01           bset    0,portb
0058   0125 CD 01 00        jsr    DELAY22        ;22uS
0059   0128 11 01           bclr    0,portb
0060   012A CD 01 00        jsr    DELAY22        ;22uS
0061   012D CC 01 23        jmp    LED1
0062   0130             
0063   0130             ;***********************************************************
0064   0130             ; Interrupt Service Routines -- (Interrupts not currently used)
0065   0130             
0066   0130 CC 01 15    TOVFLW:  jmp     START
0067   0133 CC 01 15    IRQ:     jmp     START
0068   0136 CC 01 15    SWI:     jmp     START
0069   0139             
0070   0139             ;***********************************************************
0071   0FF8                     .org $FF8           ; set reset vectors
0072   0FF8             
0073   0FF8 01 30               .dw      TOVFLW          ; $FF8-9
0074   0FFA 01 33               .dw      IRQ             ; $FFA-B
0075   0FFC 01 36               .dw      SWI             ; $FFC-D
0076   0FFE 01 15               .dw      START           ; $FFE-F
0077   1000             
0078   0F38                 .org $F38
0079   0F38             
0080   0F38 60              .db    $60
0081   0F39             
0082   0F39                 .end
tasm: Number of errors = 0

Labels (1)
0 Kudos
Reply
1 Solution
1,497 Views
TrevJ
Contributor II

Hi All,

 

Thanks everyone for your help

 

It looks like the problem with the different versions of my code not working is nothing to do with the actual code, but that some of the EPROMs I've been using don't appear to be compatible with the 68705 programming board.

 

The first EPROMs I used were AMD AM27C64-205DC EPROMs (I grounded A12 as it isn't used) - the reason I used 27C64 EPROMs rather than the 2532 EPROMs that are supposed to be used is because I only had one 2532 and my modern universal device programmer wouldn't program it.

 

Most of the later versions of the software (the ones that didn't work) used Fairchild NMC27C64Q EPROMs and despite my universal programmer being happy to program them with the settings left the same (I did check the programming voltage, pinout etc) and they all verified OK.

 

However for some reason the 68705 programmer appears to be incompatible with those EPROMs, I've just sorted out some more AMD EPROMs and used one of them to program a 68705 with a version of software that wasn't working and it runs OK now.

 

Thanks again and Best Regards

 

Trev Jackson

 

 

View solution in original post

0 Kudos
Reply
7 Replies
1,497 Views
rocco
Senior Contributor II

Hi Trev,

 

Welcome to the forum.

 

The first questions:

What type of oscillator are you using and what kind of timing variations are you experiencing? The R3 can use almost anything from a crystal to a pullup resistor or jumper. The resistor approach can have a 25% variation from chip to chip, and the jumper approach (between XTAL and EXTAL) can have a 50% variation. From your MOR register and comments, it looks like you are configured for a 1 Mhz crystal.

 

Now in your WAIT1MS routine, notice the line:

 

              ldx    120        ; 2uS

 

I assume you want to load X with 120, but you are instead loading X with the contents of location 0x78. Since you never initialize ram, that value will likely be different for each MCU. The instruction should be:

 

              ldx    #120        ; 2uS

 

As far as DELAY22 not working, what kind of symptoms are you getting?

 

0 Kudos
Reply
1,497 Views
TrevJ
Contributor II

Hi,

 

Thanks for pointing out my mistake in loading a memory location, rather than an immediate value - that explains the variation in the time periods - which were x0.25 x0.5 x0.75 x1 and x2 of the original chip I tried - I feel confident that fixing the code error will fix that.

 

As I was having problems with what appeared to be the crystal stopping (checking with the oscilloscope was showing no oscillation with one version of software and 4MHz with another), I tried an external clock - the external clock is 4MHz giving a 1MHz internal clock cycle.

 

When I try to run the code with the 22uS delay I don't get any output at all from the chip and putting the oscilloscope on the output pin (Port B, bit 0) just gives 5V - externally I have an LED connected through a 510 ohm resistor to 5V.

 

Thanks again for your help.

 

Best Regards

 

Trev

 

 

0 Kudos
Reply
1,497 Views
PeterHouse
Contributor I

Trev,

 

Unless and even if you are using a low capacitance probe, the probe capacitance can sometimes kill the oscillator and oftentimes alter the frequency.  In either case, the sudden application of the probe capacitance can stop the clock resulting in unknown errors.  If you must probe the clock, make sure the probe is connected on the oscillator output terminal and not the feedback terminal and connected prior to power on.

 

Good Luck,

 

Peter House

0 Kudos
Reply
1,497 Views
TrevJ
Contributor II

Hi Peter,

 

I checked the crystal with both versions of software (using the same mcu) and with one version is oscillated, with the other it didn't.  Just in case something weird was going on inside the mpu I thought I would make sure that it had a nice strong clock, by setting up an external oscillater, which is then bufferred through a 4001 NOR gate.  The EXTAL clock input now always has a strong clock signal and the XTAL input is connected to GND as per the MC68705R3 Technical Summary data sheet.

 

Best Regards

 

Trev

0 Kudos
Reply
1,497 Views
PeterHouse
Contributor I

Trev,

 

For anything serious I have learned to use an external oscillator especially if the engineering time is short and there is no temperature range testing or other environmental testing.  The external oscillators already have this engineering inside and consequently cost a little more.

 

Peter

0 Kudos
Reply
1,498 Views
TrevJ
Contributor II

Hi All,

 

Thanks everyone for your help

 

It looks like the problem with the different versions of my code not working is nothing to do with the actual code, but that some of the EPROMs I've been using don't appear to be compatible with the 68705 programming board.

 

The first EPROMs I used were AMD AM27C64-205DC EPROMs (I grounded A12 as it isn't used) - the reason I used 27C64 EPROMs rather than the 2532 EPROMs that are supposed to be used is because I only had one 2532 and my modern universal device programmer wouldn't program it.

 

Most of the later versions of the software (the ones that didn't work) used Fairchild NMC27C64Q EPROMs and despite my universal programmer being happy to program them with the settings left the same (I did check the programming voltage, pinout etc) and they all verified OK.

 

However for some reason the 68705 programmer appears to be incompatible with those EPROMs, I've just sorted out some more AMD EPROMs and used one of them to program a 68705 with a version of software that wasn't working and it runs OK now.

 

Thanks again and Best Regards

 

Trev Jackson

 

 

0 Kudos
Reply
1,497 Views
PeterHouse
Contributor I

Trev,

 

Glad you got it working and thanks for letting us know!

 

Peter

0 Kudos
Reply