;adressen som der brændes på i PIC kredsen (høj) ;Her starter prog. afviklingen (reset vektor)

Relaterede dokumenter
Filnavn: main.c

// Definition af porte og funktioner

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Seriel kommunikation

System Arkitektur og Integration

Datamaters arkitektur og programmering

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse.

MCE2040 SERIEL KOMMUNIKATIONSMODUL

LCD Character display Intro

up/ansi Eksamensspørgsmål

Projekt - RoboNet Del Journal.

Internt interrupt - Arduino

Start på Arduino og programmering

uprocessorens hardware

Hurtigt i gang med LinMot DeviceNet til Allen Bradley Logix Plc

Introduktion til programmering. Af mikroprocessor Atmel ATmega328P i en Arduino Uno

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

Brug af digitale ind og udgange

Microcontroller, Arduino

Arduino Programmering

Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Indholdsfortegnelse :

Seriel kommunikation RS232 / RS485

GSM SMS Modem MODEL: SA RTU-1 V1.01

Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)

const int disponibel_10= 10; const int disponibel_11= 11; const int disponibel_12= 12; const int blinkled = 13; // pin 13 er LED på NANO

Seriel kommunikation

Fra programmering til mikroprocessor

Eksamen dcomnet Q2/2010. Navn

Bruger manual AGAM kontrolboks

Betjeningsvejledning. til. Vandkiosk. system

LCD Modul. Ved Power-on skal LCD-displayet initieres, og evt. indstilles til 4-bit kommunikation.

Microcontroller, Arduino

CANSAT & ARDUINO step by step

Hardware dokumentation Skrevet af. Gruppen. Version 1.0

ELCANIC A/S. ENERGY METER Type ENG110. Version Inkl. PC program: ENG110. Version Betjeningsvejledning

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

Nedenstående opgaver er lavet til en Allen-Bradley PLC, men uden videre tilpasses andre PLC typer.

// inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Netværk & elektronik

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

WT-1011RC Programmer User Guide

16. september 2013 InClimate funktionalitets og modbus setup version 7.1 Side 2

Opgaver - PLC - analogteknik - forbindelsesteknik...3 Opgaver - PLC - analogteknik - programmering...9

ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning

Særlige funktioner. på 2 C-bussen: speed er på 100 Kbps. I den udgave, som kaldes fast speed, er missionshastigheden på op til 400 Kbps.

K8048 PIC PROGRAMMER BOARD

Kom igang med Scroll:bit

Start af nyt schematic projekt i Quartus II

Betjeningsvejledning. til. Vandudvejning. system

Blockprog Rev1.0. Block programmering CS1/CJ1. Qiuck guide OMRON

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach 2002

Niveauer af abstrakte maskiner

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor.

Stregkodereferencevejledning

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Projekt Træningsmaskine

X88. X88 er en GSM/SMS baseret fjernstyring med: 8 indgange 8 relæudgange Mulighed for temperaturføler

DiSEqC-Positioner. Best. nr. HN4892 (Brugsanvisnings nr. 361)

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

WT-1011RC Programmer User Guide

Viditronic NDVR Quick Guide. Ver. 2.0

Programmeringseksempel tl BCxxxx (Seriel)

Zense PC-boks ASCII Interface

InClimate. Funktionalitets setup og Modbus beskrivelse. Version 7200 Software. Version Senmatic A/S.

BRUGERVEJLEDNING FLTA

CANSAT & ARDUINO step by step

Fable Kom godt i gang

Journal JTAG: Udarbejde af: Benjamin Grydehøj I samarbejde med PDA Projektgruppen. Elektronikteknologafdelingen på Erhvervsakademi Fyn.

Eriks Uhlenbrock servodekoder xml Uhlenbroch Servodekoder afkoblingsramper :39

Intro til AVR. Mads Pedersen, OZ6HR

03/ PW xxxxxdk BETJENINGSVEJLEDNING. SKIOLD FlexMix PC software Version 2.34

DME Bootstrap Version 1.4x

IR32C: Elektronisk digital termostat med afrimningskontrol for køle-/ frostanlæg med drift inden for lave temperaturområder.

Status vejledning. Vejledning i håndtering af status scanner, tømning og indlæsning til EasyPOS

Efter installation af GEM Drive Studio software fra Delta s CD-rom, skal hoved skærmbilledet se således ud: (koden til administrator adgang er: admin)

Typisk PC arkitektur. Synkronisering ved aktiv venten

Oversigts billedet: Statistik siden:

Delfi Connect. Bruger vejledning 1. TILSLUTNING INSTALLATION MENUSTRUKTUR...4

LCD intro. LCD Character display-intro. Redigeret 4/6-2019

Video Projector Controller. Brugermanual

Antares Brugs- og monteringsanvisning. Programmeringssoftware for Cobra CAN BUS alarmer AK44XX & AK46XX

Kom godt i gang med Fable-robotten

TG 8. Indhold: TG8 - Kredsløbsbeskrivelse Gruppemedlemmer: Kim Andersen, Kasper Jensen & Thyge Mikkelsen Dato: Modtaget af: Søren Knudsen

Opdatering af firmware

MANUAL SKIOLD GØR EN FORSKEL DM6000 INSTALLATION

Morse med micro:bit. Morse med micro:bit

Håndbog Til CPR services. Bilag 10 Opsætning af CPR klienten til understøttelse af forskellige installationstyper

Kravspecifikation For. Gruppen

INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen. I3PRG3 + I3DTM3 + I3ISY1-3. semester

Hjernetræning. Introduktion. Scratch

Computerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn

Manual IHC Kompatibelt SMS modem. Generel info:... 2 Controllere:... 2 Manualen... 2 Komandoer syntax... 2 Lysdioder... 2 Tilslutning:...

C for uc kompendium. Denne compendium er et forsøg på at lære lidt om C for uc, med Keil syntax.

Dit eventyr med robotter Der er dig, der bygger

GPS-Link version Brugervejledning Dansk Sejlunion

Transkript:

2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: ; Sætter configuration-bits ved at anvende definitioner fra include-filen, p16f84a.inc 15: 16: config _HS_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF 17: #define 18: #define 19: #define 20: #define 21: #define 22: #define 23: #define 24: #define 25: #define 26: #define 27: #define 28: #define 29: 30: counter 31: BitCounter 32: Receive 33: transmit 34: counter1 35: counter2 36: flagreg 37: prog_count 38: prog_adr0 39: prog_adr1 40: prog_type 41: prog_con0 42: prog_con1 43: prog_pica0 44: prog_pica1 45: prog_data0 46: prog_data1 47: prog_tdata0 48: prog_tdata1 mclr reset T datat mclrt resett stat statt over2000 over2100 portb,6 portb,7 porta,3 porta,2 Trisb,6 trisb,7 trisa,3 trisa,2 porta,1 trisa,1 flagreg,0 flagreg,1 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1A 0x1B 0x1C 0x1D 0x1F ;hvis PC er over 2000hex ;hvis PC er over 2100hex ;Delay til RS232 ;Delay til RS232 ;Det modtagne tegn fra RS232 ;Tegn til afsendelse på RS232 ;Delay_10ms routine ;Delay_10ms routine ;register til flag ;counter til antal byte på hexlinien ;programadresse (lav) ;programadresse (høj) ;type indikerer sidste linie i hexfilen ;configurations-word (lav) ;configurations-word (høj) ;adressen som der brændes på i PIC kredsen (lav) ;adressen som der brændes på i PIC kredsen (høj) ;databyte (lav) fra hexlinien ;databyte (høj) fra hexlinien ;databyte (lav) til at sammenligne med ;databyte (høj) til at sammenligne med 49: prog_bit_count 50: prog_cmd_data 51: col 52: lin 53: chksum 54: extra 55: flashee 56: PrgMem 57: DatMem 58: 59: 60: 61: 62: 63: 64: 65: 66: org org #include 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x0000 counter counter1 counter2 main 0x0005 RS232.lib ;bit-counter til seriel-routinerne til pic'en ;plads til at gemme cmd i ;tæller til x-retning ;tæller til y-retning ;checksum ;en extra plads ;fflash = 0 og EE = 1 ;størrelsen af Program memory ;størrelsen af Data memory (EE) ;Her starter prog. afviklingen (reset vektor) ;delay til RS232 ;Delay 10ms ;Delay 10ms ;gå til hovedprogtammet ;første adr. efter interrupt vektor ;indsæt RS232 bibliotek 67: 68: 69: 70: 71: 72: ; ; Filnavn: NEWBURN.ASM ; Besk.:PIC16x84 seriel programmer ; modtager med 57600 baud, 8 bit, 1 stopbit ; ingen paritet og ingen flowcontrol ; Passer til 10Mhz krystal ; Dato: 29. Marts 2006 ; processor 16f84a ;Dette direktiv angiver hvilken processor MPASM skal genererer kode til #include p16f84a.inc ;Dette direktiv angiver at en filen "p16f84a.inc" skal indsættes på dette sted main ;**** hovedprogram **** mclr ;mclr lav ; lav ;data lav stat ;fejlindikator lav reset ;normal reset høj

73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: status,rp0 ;definer porte T ;indgang datat ;indgang mclrt ;udgang statt ;udgang resett ;udgang status,rp0 ;definition slut prog_pica0 Reset Pic prog_pica1 adresse tæller over2000 ;PC er ikke over 2000hex over2100 ;PC er ikke over 2100hex Receive_port ;init RS232 modtag transmit_port ;init RS232 send delay_10ms delay_10ms ; pause delay_10ms 'R' ; Skriv et 'READY' på rs232 transmit ; " Transmit_data ; " 'e' ; " transmit ; " Transmit_data ; " 'a' ; " transmit ; " Transmit_data ; " 'd' ; " transmit ; " Transmit_data ; " 'y' ; " transmit ; " Transmit_data ; " D'13' ; (CR)" transmit ; " Transmit_data ; " D'10' ; (LF) " transmit ; " Transmit_data ; " 115: endloop 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: clrw movf SUBLW BTFSC GOTO movf SUBLW BTFSC GOTO movf SUBLW BTFSC GOTO receive receive,w '#' read_pic receive,w ' ' slet_pic receive,w ' ' picburnii endloop ;**** vent på kolon **** ;slet indholdet i receive-reg. ;slet indholdet i w-reg. ;Flyt tegnet til W (igen) ;sammenlign med # ;var det et #? ;hvis ja: læs PIC'en ;Flyt tegnet til W (igen) ;sammenlign med ;var det et? ;hvis ja: slet PIC'en ;Flyt tegnet til W (igen) ;sammenlign med ;var det et? ;hvis ja: send ID og et "Ready" ;hvis nej: bliv i loopet receive_wait ;vent på et tegn på rs232 (tegnet lander i "receive") movf receive,w ;Flyt tegnet til W (igen) SUBLW ':' ;sammenlign med kolon BTFSC ;var det et kolon? GOTO start_burn ;hvis ja: start brændingen 140: ;************************************************************************* 141: picburnii 142: 143: 144: read_id ;læs hvilken PIC som er tilsluttet brænderen send_id ;send det til pc-programmet GOTO main ;afslut og send et "Ready"

145: read_id 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: send_id 166: 167: 168: 169: 170: MOVLW SUBWF BTFSS BSF BTFSC BCF enterprgmem delay_10ms 0xFF prog_data0 prog_data1 D'0' prog_cmd prog_send_data flyt_til_2006 D'4' prog_cmd read_adr 0xE prog_data1,w flashee,1 flashee,1 prog_data1 write_ascii prog_data0 write_ascii ;gå ind i brænde-mode ;flyt et tilfældigt tal til W-reg ;put det i adr0 ;put det i adr1 ;load config cmd ;send cmd til pic'en ;send data til pic'en ;flyt til adr. 2006 ;læs data fra prog-mem cmd ;send cmd til pic'en ;læs adresseindhold ind i prog_data0 og prog_data1 ;flash = 0 og EE = 1 send heigh-byte's på RS232 send low-byte's på RS232 171: ;************************************************************************* 172: read_pic 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: PRloop 184: PrgMem read_hex DatMem read_hex enterprgmem delay_10ms prog_adr0 prog_adr1 0x80 lin ;**** Læs indholdet *** læs hvor meget prog. mem der (kommer fra pc-programmet) læs hvor meget data. mem der (kommer fra pc-programmet) ;gå ind i brænde-mode ;adr-tæller=0 (low) ;adr-tæller=0 (heigh) ;læg 128 i w-reg ### skal rettes hvis data er større end 1024 byte ### ;flyt værdi til y-tæller 185: loop_lin 186: 187: 188: 189: 190: loop_col 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: D'8' ;læg 8 i w-reg col ;flyt værdi til x-tæller prefix ;send prefix chkstatus ;opdater checksum D'4' ;læs data fra prog-mem cmd prog_cmd ;send cmd til pic'en read_adr ;læs adresseindhold ind i prog_data0 og prog_data1 prog_data0 send low-byte's write_ascii på RS232 prog_data1 send heigh-byte's write_ascii på RS232 movf prog_data1,w ;w-reg=data1 movf prog_data0,w ;w-reg=data0 incf prog_adr0,f ;forøg adr tæller (lav) btfsc ;(p.g.a. 16 bit) incf prog_adr1,f ;forøg evt. også høj del incf prog_adr0,f ;forøg adr tæller (lav) btfsc ;(p.g.a. 16 bit) incf prog_adr1,f ;forøg evt. også høj del D'6' ;forøg adr i pic komandoen prog_cmd ;send cmd til pic'en decfsz col ;tæl ned på x-tæller loop_col ;hvis ikke 0 fortsæt i loop l_f ;send chksum og linefeed decfsz lin ;forminsk y-tæller loop_lin ;hvis ikke 0 fortsæt i loop decfsz PrgMem ;forminsk PrgMem-tæller PRloop ;hvis ikke 0 fortsæt i loop

217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: mov2100 280: 281: 282: 283: 284: 285: 286: 287: 288: ;**** flyt til adresse 2000hex **** 0xFF ;flyt et tilfældigt tal til W-reg prog_data0 ;put det i adr0 prog_data1 ;put det i adr1 D'0' ;load config cmd prog_cmd ;send cmd til pic'en prog_send_data ;send data til pic'en 0x40 prog_adr1 ; sæt adresse til 4000h prog_adr0 ':' ;en linie starter med kolon transmit ;flyt w-reg til transmit transmit_data ;send på RS232 '0' ;så kommer et 0 transmit ;flyt w-reg til transmit transmit_data ;send på RS232 '8' ;og dernæst et 8 transmit ;flyt w-reg til transmit transmit_data ;send på RS232 prefix1 ;hent resten af prefix D'8' ;w-reg=8 chksum ;flyt til check sum movf prog_adr1,w ;w-reg= adr1 movf prog_adr0,w ;w-reg= adr0 D'4' ;læg 4 i w-reg col ;flyt værdi til x-tæller loop_id ;send data l_f ;send chksum og linefeed D'6' prog_cmd ; \ D'6' ; \ flyt til adr prog_cmd ; / 2007hex D'6' ; / prog_cmd 0x0E sæt adresse prog_adr0 til 2007hex ':' ;en linie starter med kolon transmit ;flyt w-reg til transmit transmit_data ;send på RS232 '0' ;så kommer et 0 transmit ;flyt w-reg til transmit transmit_data ;send på RS232 '2' ;og dernæst et 2 transmit ;flyt w-reg til transmit transmit_data ;send på RS232 prefix1 ;hent resten af prefix D'2' ;w-reg=2 chksum ;flyt til check sum movf prog_adr1,w ;w-reg= adr1 movf prog_adr0,w ;w-reg= adr0 D'1' ;læg 1 i w-reg col ;flyt værdi til x-tæller loop_id ;send data l_f ;send chksum og linefeed status,c rrf prog_adr1,f ; divider prog_adrx med 2 rrf prog_adr0,f (da 4000hex i filen = 2000hex i pic'en) incf prog_adr0,f ;forøg med 1 D'6' ;forøg - prog_cmd ;pic-adressen med 1 incf prog_adr0,f ;forøg adr tæller (lav) btfsc ;(p.g.a. 16 bit) incf prog_adr1,f ;forøg evt. også høj del 0x21 ;læg 21hex i w-reg subwf prog_adr1,w ;sammenlign med adr1 ;defferens? mov2100 ;hvis forskel: forøg

289: 290: 291: 292: 293: 294: 295: EEdataX 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: status,c rlf prog_adr0,f ; adr x 2 rlf prog_adr1,f ; / DAloop D'8' ;sæt gentagelse til 8 ## skal rettes hvis EE-data er større end 64 byte ## lin ;flyt værdien til lin prefix ;send liniestart chkstatus ;opret checksum EEmem ;send data l_f ;send chksum og linefeed 0x10 ;w-reg=10h addwf prog_adr0,f ;læg w-reg til adr (low) decfsz lin ;forminsk y-tæller EEdataX ;hvis ikke nul bliv da i loopet decfsz DatMem ;forminsk DatMem-tæller DAloop ;hvis ikke nul bliv da i loopet ':' ;**** send sidste linie :00000001FF **** transmit_data ; '0' ; transmit_data ; '0' ; transmit_data ; '0' ; transmit_data ; '0' ; transmit_data ; '0' ; transmit_data ; '0' ; transmit_data ; '0' ; transmit_data ; '1' ; transmit_data ; 'F' ; transmit_data ; 'F' ; transmit_data ; D'13' ; transmit_data ; D'10' ; transmit_data ; main ;læsning færdig 333: ;------------------------------------------------------------------------------------------------ 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: loop_id ;hvis ikke 0 fortsæt i loop 349: ;vend tilbage loop_id D'4' ;læs data fra prog-mem cmd prog_cmd ;send cmd til pic'en read_adr ;læs adresseindhold ind i prog_data0 og prog_data1 prog_data0 send low-byte's write_ascii på RS232 prog_data1 send heigh-byte's write_ascii på RS232 movf prog_data1,w ;w-reg=data1 movf prog_data0,w ;w-reg=data0 D'6' ;forøg adr i pic komandoen prog_cmd ;send cmd til pic'en decfsz col ;tæl ned på x-tæller 350: ;------------------------------------------------------------------------------------------------ 351: EEmem 352: 353: 354: 355: 356: 357: 358: 359: 360: D'8' col ;gentagelsesfaktor ;lægges i col loop_ee D'5' ;læs data fra prog-mem cmd prog_cmd ;send cmd til pic'en read_adr ;læs adresseindhold ind i prog_data0 og prog_data1 prog_data1 ;sæt data (heigh) til 00h prog_data0 send low-byte's write_ascii på RS232 prog_data1 send heigh-byte's write_ascii på RS232

361: 362: 363: 364: 365: 366: 367: 368: 369: loop_ee ;hvis ikke 0 fortsæt i loop ;vend tilbage 370: ;------------------------------------------------------------------------------------------------ 371: l_f 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: comf incf chksum,f chksum,f chksum write_ascii D'13' transmit Transmit_data D'10' transmit Transmit_data ;2's komplement af checksum ;forøg med 1 ;send checksum ;på RS232 ; send CR ; send LF 382: ;------------------------------------------------------------------------------------------------ 383: prefix 384: 385: 386: 387: 388: 389: 390: 391: 392: ':' transmit transmit_data '1' transmit transmit_data '0' transmit transmit_data ;**** linie-prefix **** ;en linie starter med kolon ;flyt w-reg til transmit ;send på RS232 ;så kommer et 1 ;flyt w-reg til transmit ;send på RS232 ;og dernæst et 0 ;flyt w-reg til transmit ;send på RS232 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: transmit_data ;send på RS232 ;retuner 404: ;------------------------------------------------------------------------------------------------ 405: chkstatus 406: 407: 408: 409: 410: 411: 412: movf addwf movf addwf D'16' chksum prog_adr1,w chksum,f prog_adr0,w chksum,f ;**** opdater chksum *** ;2's komplement af antal og type ;flyt til check sum ;2's komplement af adr1 ;læg til check sum ;2's komplement af adr0 ;læg til check sum ;er 413: ;------------------------------------------------------------------------------------------------ 414: 415: 416: 417: 418: 419: sendnib 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: sendchr 431: 432: movf prog_data1,w ;w-reg=data1 movf prog_data0,w ;w-reg=data0 D'6' ;forøg adr i pic komandoen prog_cmd ;send cmd til pic'en decfsz col ;tæl ned på x-tæller prefix1 prog_adr1 ;hent adr (heigh) write_ascii ;send på RS232 prog_adr0 ;hent adr (low) write_ascii ;send på RS232 '0' ;type 00 transmit ;flyt w-reg til transmit transmit_data ;send på RS232 '0' ;type 00 transmit ;flyt w-reg til transmit write_ascii ;**** send register som 2 ASCII **** fsr ;peg på filereg (pointer) swapf indf,f ;byt om på 4 øverste og 4 nederste bit sendnib ;send en ASCII-karakter på RS232 swapf indf,f ;byt tilbage igen (og send en ASCII til) movf indf,w ;flyt destination til W-reg andlw B'00001111' addlw D'48' ;læg 48 til (svarer til ASCII-nul) extra ;flyt resultat til transmit-reg D'58' subwf extra,w status,c sendchr D'7' addwf extra,f movf extra,w transmit ;flyt w-reg til transmit

433: 434: transmit_data ;send ASCII ;vend tilbage 435: ;------------------------------------------------------------------------------------------------ 436: read_adr 437: 438: 439: 440: 441: 442: 443: 444: 445: D'16' prog_bit_count status,rp0 datat status,rp0 ;*** læs en adresse ind i 2 reg's *** ;put 16 i w-reg. ;sæt bit-count til 16 ; sæt dataport til input ; \ pause ; / 446: read_adr1 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: btfsc rrf rrf status,c status,c prog_data1,f prog_data0,f ;**** loop **** ;=1 ;data klar til læsning ; \ sæt C = dataport ; / ;roter C ind i data1 ;roter data1 ind i data0 for at være sikker 472: ;************************************************************************* 473: slet_pic 474: 475: 476: 477: enterprgmem delay_10ms sletpic main ;**** Slet Pic'en ******* ;gå ind i brænde-mode ;slet PIC-kredsen ;sletning færdig 478: ;************************************************************************* 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: decf prog_bit_count ;forminsk bit-counter ;er den nul? read_adr1 ;hvis nej: fortsæt loopet status,rp0 datat ; hvis ja: sæt dataport til output status,rp0 prog_data0,0 reset start prog_data1,7 og stop-bit status,c ;sæt carry = 0 rrf prog_data1,f ;roter C ind i data1 rrf prog_data0,f ;roter data1 ind i data0 ;afslut og vend tilbage (se *) ;*(prog_data0=adr(low) og prog_data1=adr(heigh) start_burn ;**** start brænding **** read_id ;#################### sat ind i forb. med udvikling stat ;fejlindikator lav enterprgmem ;gå ind i brænde-mode delay_10ms sletpic ;anbefalet sletning af pic LinieStart ;**** læs en linie i hexfilen **** prog_count hent count read_hex fra hexlinien prog_adr1 hent high-byte adr read_hex fra hexlinien prog_adr0 hent low-byte adr read_hex fra hexlinien status,c rrf prog_adr1,f ; divider prog_adrx med 2 rrf prog_adr0,f (da 4000hex i filen = 2000hex i pic'en) prog_type hent type read_hex fra hexlinien D'1' ;er det type 01?, hvilket betyder subwf prog_type,w ;sidste linie... btfsc ;hvis ja - så... burnconf ;brænd config og afslut brænding 0x07 ; hvis dette er config-word, subwf prog_adr0,w ; så gem det til sidst og ; fortsæt... ikke2007 ;

505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: hex2000 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 0x20 ; subwf prog_adr1,w ; ; ikke2007 ; hent2byte ; movf prog_data0,w ; prog_con0 ; movf prog_data1,w ; prog_con1 ; incf prog_pica1,f ; decf prog_count,f ; btfsc status,z ; prog_skip ; decf prog_count,f ; btfsc ; prog_skip ; over2000 ; loadconf ; opdatpicadr ; prog_word ; ikke2007 ;fortsæt her hvis adressen ikke er 2007 btfsc over2000 ;hvis adresse er over 2000 check2100 ;så flyt PC til configurations 0x20 ;memory... subwf prog_adr1,w ; btfsc ; loadconf ; check2100 ;fortsæt her hvis adressen ikke er 2000 btfsc over2100 ;hvis adresse er over 2100 continue ;så gå i EEdata-mode... 21h ; subwf prog_adr1,w ; btfsc ; reenterprgmem ; continue ;fortsæt her hvis adressen ikke er 2100 opdatpicadr ;synkroniser pic-adr med prog-adr Prog_word ;**** programer 2 byte **** hent2byte ;hent 2 byte fra hexlinien D'2' ;cmd load data for program mem btfsc over2100 ;hvis EEdata-mode addlw D'1' ;så: cmd load data for data mem prog_cmd ;send cmd til pic'en prog_send_data ;send data tilpic'en ;start her hvis: kom fra loadcon burn_word ;brænd ordet decf prog_count,f ;forminsk count btfsc status,z ;hvis nul så gå til prog_skip prog_skip ;(evt. fejlcheck!!) decf prog_count,f ;forminsk count ;hvis nul så gå til prog_skip prog_word ;ellers fortsæt med at læse byte fra hexlinien prog_skip ;**** læs bytes frem til kolon **** receive_wait ;hent en byte fra hexlinien ':' ;læg et kolon i w subwf receive,w ;træk det fra den læste byte BTFSS ;var byten et kolon? GOTO prog_skip ;hvis nej, hent da en ny byte fra hexlinien liniestart ;hvis ja, gå da igang med en ny hexlinie loadconf ;**** første gang man når til config-mem **** hent2byte ;hent 2 byte fra hexlinien D'0' ;load config cmd prog_cmd ;send cmd til pic'en prog_send_data ;send data til pic'en 0x00 prog_pica0 ; \ sæt pic adr 0x20 ; / til 2000hex prog_pica1 opdatpicadr ;synkroniser pic-adr med prog-adr over2000 ;vi er nu i config-mem området hex2000 ;spring til prog_word routinen opdatpicadr ;**** synkroniser adresser **** cmp_picadr ;start med at sammenlign prog-adr og pic-adr

577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: burn_word ;**** brænd og sammenlign **** 600: 601: 602: 603: 604: 605: 606: BTFSS flashee,1 bnfl bw_nxt ;gå til sammenlign 607: bnfl 608: 609: 610: 611: 612: 613: bw_nxt 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640: 641: 642: 643: 644: 645: 646: 647: 648: inc_picadr ;****** forøg *********** D'6' ;forøg adr i pic komandoen prog_cmd ;send cmd til pic'en incf prog_pica0,f ;forøg pic adr tæller (lav) btfsc ;(p.g.a. 16 bit) incf prog_pica1,f ;forøg evt. også høj del cmp_picadr ;***** sammenlign ******* movf prog_adr1,w subwf prog_pica1,w ; sammenlign høj del inc_picadr ; hvis forskel: forøg movf prog_adr0,w subwf prog_pica0,w ; sammenlign lav del inc_picadr ; hvis forskel: forøg hent2byte ;**** læs 2 bytes fra hexfilen **** prog_data0 ;i dette register skal byten ligge read_hex ;hent byten fra hexlinien prog_data1 ;i dette register skal byten ligge read_hex ;hent byten fra hexlinien ;Denne sekvens hvis PIC'en er en EEPROM************* B'001000' ;cmd begin program prog_cmd ;send cmd til pic'en delay_10ms ;vent 10 ms ;Denne sekvens hvis PIC'en er en FLASH*************** B'011000' ;cmd begin program only prog_cmd ;send cmd til pic'en delay_1ms ;vent 1ms B'10111' ; \ end programming prog_cmd ; / D'4' ;read data from prog-mem cmd btfsc over2100 ;hvis EEdata-mode så: addlw D'1' ;read data from data mem cmd prog_cmd ;send cmd til pic'en prog_compare ;sammenlign det sendte og det læste D'6' ;increment adrs cmd prog_cmd ;send cmd til pic'en incf prog_pica0,f ;forøg pic adr tæller (lav) btfsc ;(p.g.a. 16 bit) incf prog_pica1,f ;forøg evt. også høj del prog_cmd ;**** send prog-komando **** prog_cmd_data ;gem kommando der skal sendes D'6' ;put 6 i w-reg. prog_bit_count ;gem 6 i bit-counter prog_cmd1 ;*** loop **** ;=1 rrf prog_cmd_data,f ;roter cmd_data og få bit i c btfsc status,c ; \ sæt data udgangen status,c ; / til det samme som C ; pause for at være sikker ;=0 pause for at være sikker decf prog_bit_count ;forminsk bit-counter ;er den nul? prog_cmd1 ;hvis nej: fortsæt loopet ;hvis Ja: afslut og vend tilbage prog_send_data ;**** Send 16 bit data **** status,c ;sæt C = 0 rlf prog_data0,f

649: 650: 651: 652: 653: 654: 655: 656: 657: prog_send1 658: 659: 660: 661: 662: 663: 664: 665: 666: 667: 668: 669: 670: 671: 672: 673: 674: rrf rrf btfsc decf prog_data1,f prog_data0,f status,c status,c prog_bit_count prog_send1 ;**** loop **** ;=1 ;roter data1 over i data0 ;roter data0 og få bit i C ; \ sæt data udgangen ; / til det samme som C for at være sikker ;=0 for at være sikker for at være sikker ;forminsk bit-counter ;er den nul? ;hvis nej: fortsæt loopet ;hvis Ja: afslut og vend tilbage 675: 676: 677: 678: 679: 680: 681: 682: 683: 684: 685: prog_cmp1 686: 687: 688: 689: 690: 691: 692: 693: 694: 695: 696: 697: 698: 699: 700: 701: 702: 703: 704: 705: 706: 707: 708: 709: 710: 711: 712: btfsc rrf rrf decf movf subwf STATUS,C STATUS,C prog_data1,f prog_data0,f prog_bit_count STATUS,Z prog_cmp1 STATUS,rp0 datat STATUS,rp0 prog_data0,0 prog_data1,7 prog_data0,w prog_tdata0,w Cmp_error over2100 comp_high ;**** loop **** ;=1 ;data klar til læsning ; \ sæt C = dataport ; / ;roter C ind i data1 ;roter data1 ind i data0 for at være sikker ;forminsk bit-counter ;er den nul? ;hvis nej: fortsæt loopet ; hvis ja: sæt dataport til output reset start og stop bit før sammenligning sammenlign low-byte ;var de ens? ;hvis nej: fejl!! ;hvis ja: er det EEdata? ;hvis nej: sammenlign high-byte ;hvis ja: afslut og vend tilbage 713: 714: 715: 716: 717: 718: 719: 720: rlf prog_data1,f ; læg 0 i start og slut prog_data1,7 movf prog_data0,w prog_tdata0 ; \ gem de 2 data bytes movf prog_data1,w ; / i Tdata 1 og 2 prog_tdata1 D'16' ;put 16 i w-reg. prog_bit_count ;gem 16 i bit-counter prog_compare ;*** sammenlign sendte data med modtaget data *** D'16' ;put 16 i w-reg. prog_bit_count ;sæt bit-count til 16 status,rp0 datat ; sæt dataport til input status,rp0 ; / ; \ pause comp_high ;**** sammenlign high-byte **** movf prog_data1,w sammenlign subwf prog_tdata1,w high-byte ;var de ens? Cmp_error ;hvis nej: fejl!! Cmp_error ;**** fejl routine **** prog_pica1 send heigh-byte's ;hvis ja: afslut og vend tilbage

721: 722: 723: 724: 725: 726: 727: 728: 729: 730: 731: 732: 733: 734: 735: 736: 737: 738: 739: 740: 741: 742: 743: 744: 745: 746: 747: 748: 749: 750: 751: 752: 753: 754: 755: 756: 757: 758: 759: 760: 761: 762: 763: 764: 765: 766: 767: 768: 769: 770: 771: 772: 773: 774: 775: 776: 777: 778: 779: 780: 781: 782: 783: flyt_til_2007 784: 785: 786: flyt_til_2006 787: 788: 789: 790: 791: 792: write_ascii på RS232 prog_pica0 send low-byte's write_ascii på RS232 'E' ;Skriv et 'Error' på rs232 transmit ; " Transmit_data ; " 'r' ; " transmit ; " Transmit_data ; " 'r' ; " transmit ; " Transmit_data ; " 'o' ; " transmit ; " Transmit_data ; " 'r' ; " transmit ; " Transmit_data ; " stat ;indiker fejl på LED ;afslut og vend tilbage reenterprgmem ;**** vend tilbage til prg-mem **** over2100 ;vis EEdata-mode prog_pica0 ;reset pic-adressen prog_pica1 ; " enterprgmem ;**** gå ind i prg-mem **** mclr reset pic'en reset " delay_10ms ;sæt til 0 ;sæt data til 0 status,rp0 ;sæt og data til output T ; " datat ; " status,rp0 ; " ;sæt til 0 ;sæt data til 0 ; " ; " reset ;gå i brænde mode mclr ; " ; ; ;afslut og vend tilbage burnconf ;*** brænd configuratiop og afslut brænding *** reenterprgmem ;gå ind i prog-mode over2100 ;men ikke i EEdata-mode movf prog_con0,w ; prog_data0 ;hent configword (lav) movf prog_con1,w ; prog_data1 ;hent configword (høj) D'0' ;load config cmd prog_cmd ;send cmd til pic'en prog_send_data ;send data til pic'en flyt_til_2007 ;flyt til adr 2007 D'8' ;################## prog_cmd ;################## delay_10ms ;################## main ;brændingen færdig ;forøger fra adr 2000hex D'6' ;til 2007hex... prog_cmd ; ;(start her hvis det er ID, der skal læses) D'6' ; prog_cmd ; D'6' ; prog_cmd ; D'6' ; prog_cmd ; (7 X incr-adr cmd)

793: 794: 795: 796: 797: 798: 799: 800: ;********************** slet pic'en ********** 801: sletpic 802: 803: 804: 805: 806: 807: 808: 809: 810: 811: 812: 813: 814: 815: 816: 817: 818: 819: 820: 821: 822: 823: 824: 825: 826: 827: ;*************** RecHex******************************** 828: Read_Hex 829: 830: 831: 832: 833: 834: Nibble 835: 836: 837: 838: 839: 840: 841: 842: 843: 844: 845: ;*****************burner delay routine (EEPROM-kredse)********* 846: Delay_10ms 847: 848: 849: 850: 851: 852: 853: 854: 855: loop10ms ;hvis tæller ikke er nul: fortsæt loop ;ellers: afslut og vend tilbage 856: ;*****************burner delay routine (FLASH-kredse)********** 857: Delay_1ms 858: 859: 860: counter1 0x4 counter2 ; 1,23ms = (772*4h+6)*400ns ;nulstil tæller 1 ;4h i w-reg. ;læg 4h i tæller 2 861: 862: 863: 864: D'6' ; prog_cmd ; D'6' ; prog_cmd ; D'6' ; prog_cmd ; ; prog_data0 ;procedure til at slette pic'en comf prog_data0,f ; " prog_data1 ; " comf prog_data1,f ; " D'0' ; " prog_cmd ; " prog_send_data ; " flyt_til_2007 ; " D'1' ; " prog_cmd ; " D'7' ; " prog_cmd ; " D'8' ; " prog_cmd ; " delay_10ms ; " D'1' ; " prog_cmd ; " D'7' ; " prog_cmd ; " B'11111' ; prog_cmd ; delay_10ms ; reenterprgmem ; over2100 ; ; " fsr ;sæt pointer til at modtage hexbyte indf ;slet destination Call Nibble ;Modtag 4 bit i et hextegn swapf indf,f ;swap det til highnibble nibble ;Modtag 4 bit igen receive_wait ;vent på et tegn på seriel port D'48' ;hex - 48 (værdien af '0') subwf receive,f ; receive,5 ;evt. korriger for smaa bogstaver i hex D'7' ;evt -7 btfsc receive,4 ;test for større end 16 ('A'..'F') subwf receive,f ;Her er recieve 0..15 movf receive,w ; iorwf indf,f ;OR resultatet ind i INDR destination ; ; 10,19ms = (772*21h+6)*400ns counter1 ;nulstil tæller 1 0x21 ;21h i w-reg. counter2 ;læg 21h i tæller 2 loop10ms ;**** loop **** decfsz counter1,f ;forminsk tæller 1 (resultat i tæller) loop10ms ;hvis tæller ikke er nul: fortsæt loop decfsz Counter2,F ;ellers: forminsk tæller 2 (resultat i tæller) loop1ms ;**** loop **** decfsz counter1,f ;forminsk tæller 1 (resultat i tæller) loop1ms ;hvis tæller ikke er nul: fortsæt loop decfsz Counter2,F ;ellers: forminsk tæller 2 (resultat i tæller)

865: loop1ms ;hvis tæller ikke er nul: fortsæt loop 866: ;ellers: afslut og vend tilbage 867: ;--------------------------------------------------------------------------------------- 868: end ;programmet er slut!!!!