Home www.visualprog.cz

 

Mikrokontroler Motorola 68HC711,
příklady programování.

(c) 2002 Pavel Pindora

  Email Kontakt  

Pro více informací je zde formulář

Click on of the PayPal button to donate money to this Project

New 25.1.2004 JBug11 Náhrada oblíbeného dosovského PCBug11.

 

Blokové schéma mikrokontroleru  68HC711 firmy Motorola, forma 68HC711E9 má 12kB EPROM

MODA MODB         

volba modu procesoru , bootstrap režim po restartu a možnost tak pomocí PCBug11 modifikovat registry , nahrávat program apod.

XTAL,EXTAL připojení krystalu

IRQ,XIRQ vnější přerušení chodu programu a obsluha rutin

RESET restart procesoru

PORTA     vstup/výstupní port dle registru PACTL nebo Output compare / Input capture

PORTB     výstupní registr

PORTC     vstup/výstupní port dle registru DDRC

PORTD     vstup/výstupní port dle registru DDRD nebo PD0 RxD, PD1 TxD seriová linka PD2-PD5 SPI kanál

PORTE      vstupní port binární nebo 8 analogových 8bitových vstupů

 

--------------------   Univerzální destička pro mikrkontrolér 68HC711E9  --------------------

8 opto 24V vstupů 

4 opto 24V výstupy ULN2003 

TTL seriový port s protokolem ModBus , možnost napojení PDA PocketPC viz sekce PDA PocketPC 
Socket TCP/IP, komunikace, ModBus

 

 

 

 

---------------- Hrubé schéma zapojení destičky bez optronu ---------------

 

Obsluha SPI kanálu, převodníky A/D AD7710 a D/A AD7243 firmy Analog Devices.
Obsluha asynchronní seriové linky.

Obsluha SPI kanálu,
převodníky A/D AD7710 a D/A AD7243 firmy Analog Devices.

 

            RAMBS     equ $0000 zacatek RAM 

            EEPROM   equ $B600 za‡ tek EEPROM 

            REGBS       equ $1000 umisteni bloku registru v pameti 

            START      equ EEPROM umisteni naseho programu v EEPROM 

            STACK      equ RAMBS+$1FF 

            PORTA      equ $1000 ADRESA PORTU A 

            PORTC      equ $1003 ADRESA PORTU C 

            PORTB      equ $1004 ADRESA PORTU B 

            DDRC        equ $1007 

            PORTD      equ $1008 ADRESA PORTU D 

            PORTE       equ $100A ADRESA PORTU E 

            DDRD        equ $1009 ADRESA ridiciho registru portu D 

            PACTL      equ $1026 

            SPCR          equ $1028 ADRESA ridiciho registru SPI 

            SPSR          equ $1029 SPI status register 

            SPDR         equ $102A SPI data register

*------------------ bufer a data pro control registr ------------------------- 
cntr3         equ RAMBS+$100 MSB A/D 
cntr2         equ RAMBS+$101 . 
cntr1         equ RAMBS+$102 LSB A/D 
dapr2        equ RAMBS+$103 MSB D/A 
dapr1        equ RAMBS+$104 D/A 
cntd3        equ $04 MSB 
cntd2        equ $00 
cntd1        equ $19 LSB
***************************************
* Hlavni program *
*************************************** 
            ORG START umisteni programu do EEPROM

inic        lds #STACK 
              jsr inspi 
              clr dapr1 
              clr dapr2
*----------------------------------------
zac        ldx #PORTA 
              bset 0,x#$F8          D/A,A0,TFS,RFS-log.1 
              bset 0,X#$20         set pin SS ldx #$1000 jsr zpoz
*------- Control ------------------------ 
             ldx #PORTA 
             jsr uloz 
*------- A/D convert --------------------
ctu       bset 0,x#$18                TFS,RFS-log.1
opas    brset 0,x#$80 opas     DRDY=1
ctida    bclr 0,x#$08                 RFS-log.0 
            ldab #2 
            ldy #cntr3 
            jsr prispi 
            bset 0,x#$08 RFS-log.1 
            ldy #PORTE 
            brclr 0,y#$01 convr 
            ldy #dapr2 
            ldd dapr2 
            addd #100 
            std dapr2 
            bra conad 
*------- D/A convert --------------------
convr      ldy #cntr3
conad     ldab #2
                bclr 0,x#$40 
                jsr zapspi 
                bset 0,x#$40 
                bra opas
 
***************************************
* podprogramy *
***************************************
 
*-----------------------------------------------------------------------------
***************************************
* Inicializace SPI *
***************************************
inspi    ldaa #$00 
            staa PORTD 
            ldaa #$38             SS,SCK,and MOSI=OUTS, others=INS 
            staa DDRD         
            ldaa #$54             SPIE,SPE,DWOM,MSTR ; CPOL,CPHA,SPR1,SPR0 
            staa SPCR           0, 1 , 0 , 1 ; 0 , 1 , 0 , 0-1MHz 
            ldaa #$08 
            staa PACTL        Port PA3 out 
            ldaa #$FF 
            staa DDRC 
            rts
***************************************
* Obsluha SPI kanálu *
* Vyslání dat na SPI kanál *
* reg.B kolik dat se bude vysíl. *
* reg.Y adresa vysílaných dat *
***************************************
zapspi     pshx 
                ldx #PORTD 
                bclr 0,x#$20         reset pin SS 
                ldx #SPSR
znsp        ldaa 0,y
                staa SPDR                 reg A  do vysil.registru SPI
spif         brclr 0,X#$80 spif     *test statusu SPIF 
                decb 
                beq konsz 
                iny 
                bra znsp 
konsz      ldx #PORTD 
                bset 0,X#$20             set pin SS 
                pulx 
                rts
***************************************
* Obsluha SPI kanálu *
* Načtení reg.A z SPI kanálu *
* reg.B kolik dat se bude přij. *
* reg.Y adresa vysílaných dat *
***************************************
prispi      pshx ldx #PORTD 
                bclr 0,x#$20                 reset pin SS 
                ldx #SPSR 
znpr        ldaa 0,y 
                staa SPDR                     reg A do vysil.registru SPI,nem  vliv spi1
                brclr 0,X#$80 spi1        *test statusu SPIF 
                ldaa SPDR 
                staa 0,y 
                decb 
                beq konsp 
                iny 
                bra znpr
konsp     ldx #PORTD 
                bset 0,X#$20 set pin SS 
                pulx 
                rts
 *************************************** 
* Obsluha A/D kanálu * 
* Vyslání řídícího slova do * 
* A/D převodníku * 
***************************************
uloz        ldaa #$00 
                staa cntr3 
                ldaa #$10 
                staa cntr2 
                ldaa #$46 
                staa cntr1
bsta         bclr 0,x#$20             A0 -log.0 
                bclr 0,x#$10             TFS -log.0 
                ldab #3 
                ldy #cntr3 
                jsr zapspi 
                bset 0,x#$10             TFS -log.1 
                bset 0,x#$20             A0 -log.1 
                rts 
*************************************** 
* Zpoždění * 
***************************************
zpoz        inx
zpoz1      dex
                bne zpoz1 
                rts
******************************************************************************
END


Obsluha asynchronní seriové linky.

*-----------------------------------------------------------------------
* Ser. linka

rambs equ $0000 začátek RAM
regbs equ $1000 umístění bloku registrů v paměti
start equ $B600 umístění našeho programu v EEPROM

baud equ regbs+$2b registr BAUD
sccr1 equ regbs+$2c SCCR1
sccr2 equ regbs+$2d SCCR2
scsr equ regbs+$2e SCI Status Register
scdr equ regbs+$2f SCI Data
jtser equ rambs+$C4

************************************************************************

* Hlavní program *

************************************************************************

org start umístění programu v EEPROM


***************************************

* Inicializace systému *

***************************************

.

.

.

.

*----------- inicializace přerušení od ser. linky---------

ldaa #$7E

staa jtser od ser.linky

ldx #sciin

stx jtser+1

***************************************************

* Inicializace seriové přenosové linky SCI *

***************************************************
inicser

 

ldaa #$30 9600 Bd = #$30,600 = #$34,300 = #$35

staa baud do reg. BAUD

ldaa #$00 1 start, 8 data, 1 stop bit,probuzení zakázáno

staa sccr1 do registru SCCR1

ldaa #$0C INT povolen, vysíláni,přijem povolen

staa sccr2 do registru SCCR2

cli Povolit přerušení

.

.

.

.


******************************************

* Obsluha přerušení od *

* seriove linky *

******************************************
sciin

 

sei zákaz přerušení

ldaa scsr čti SCI Status Register

anda #$20 je připraven znak ?

beq kscii ne,konec

ldab scdr

cmpb #STX je to znak počátku zprávy STX

bne kscii ne konec

jsr serin ano

.

.

.

.
kscii

 

cli Povolit přerušení

rti

New 25.1.2004    JBug11 Náhrada oblíbeného dosovského PCBug11

JBug11 umožňuje naprogramování jednočipu 68HC11 ,načítat hodnoty registrů,paměti vkládat bpointy,trasovat atd.

.

 

 

Pro používání tohoto software je potřeba mít vývojovou desku umožňující provozovat čip hc11 v tzv. Bootstrap mode . Např. já používám Motorola M68HC11EVBU ale takovou desku je možno zbastlit dle následujícího schéma , částečně převzatého z PDF dokumentace k JBug11

 

 

Zde je navíc dálkové ovládání resetu procesoru, což na EVBU nemám a tak musím mačkat tlačítko.

Pro 68HC711 je potřeba nastavit JBug11 dle následujících obrázků.

 

                                                        1) Nastavit správně rozsah paměti

 

                                                        2) Reset mám ruční takž none,nezapomenout volbu COMu, ten může být i COM3 podle toho co máte

                                                             v  PC , dále povolíme zápis do CONFIG,EEPROM,EPROM

 

Nyní již po stisku Ctrl B by měl vyjet dialog a JBug11 naváže spojení s hc11tkou

 

Můžeme se pokusit nahrát program do jednočipu ,pokud použijeme i EPROM, nesmíme zapomenout připojit pálící napětí , u mne na pin 18 68HC711E9

V menu File je i verifikace programu .

 

 

Pokud ale máme program umístěný i v EEPROM musíme ji v jednočipu povolit příslušnými bity  registru BPROT ( 1035h ) , názorně to demonstruje následující obrázek , jednotlivé povely jsou v Command History

r bprot=10

.

.

 

 

Stejně tak postupujeme při  nastavení Watchdogu ,opět to nejlépe ukáže historie příkazů :

cls                    vymaže obrazovku

r bprot=0f       shodí se bit s váhou 10h ,který povolí zápis do config regisatru

r config=0b     nastaví watchdog

r bprot=1f       setne bit s váhou 10h ,který zakáže zápis do config regisatru ale to se stane i po resetu aby se nastavení konfigu aktivovalo.

 

 

A pro úplnost se podívejme na význam registrů BPRIOT a CONFIG