fork download
  1. ;Forfatter : Navn
  2. ;Projekt : Navn
  3. ; Dato : xx
  4.  
  5.  
  6.  
  7.  
  8. /*
  9. d: 15/1-2010, ændret så der kan skrives æøå, ÆØÅ i tekststring'en.
  10.  
  11. Denne rutine er beregnet til at kopiere ind i et uC projekt, for at opnå kontakt til
  12. et LCD Karakterdisplay
  13.  
  14. Der downloades danske karakterer æ, ø, å, og Æ, Ø og Å i LCD-modulet !
  15. Startet d. 21/9-03 rev 250903, 2/12-06, 22/01-2007
  16.  
  17. This text is used for copying into a uC project, in order to comunicate with a
  18. LCD Character module.
  19.  
  20. The danish special characters are downloaded in the LCD
  21.  
  22. Valle Thorø
  23.  
  24.  
  25. */
  26.  
  27.  
  28. ;$nomod51 ;se bort fra 8051 reegistre
  29. ;$include (at892051.inc) ;Benyt istedet ATMEL89C2051 definitioner
  30.  
  31. ;*********************************************************************************************
  32.  
  33. NAME LCDDisplay
  34.  
  35. ;*********************************************************************************************
  36.  
  37. ; Konstant-, Hukommelses- og Portbelægning
  38. ; Constants, memory and Pins definitions
  39. ;---------------------------------------------------------------
  40.  
  41. ; Pins-definitioner
  42.  
  43. LCD_RS EQU P1.7
  44. LCD_RW EQU P1.6
  45. LCD_ENABLE EQU P1.5
  46. LCD_D4 EQU P1.4
  47. LCD_D5 EQU P1.3
  48. LCD_D6 EQU P1.2
  49. LCD_D7 EQU P1.1
  50.  
  51. ; LCD_ENABLE kan undværes, Så skal LCD'en blot være enablet hele tiden
  52. ; Aktiv LAV !
  53.  
  54. ; LCD_ENABLE is not nessassary needed, should then by hardware be connected to low.
  55. ;-------------------------
  56. ; RAMdefinitioner / Ram-definitions
  57.  
  58.  
  59.  
  60. ; definition af konstanter / definition of Constants
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. ;------------------------------------------
  68. ; Her starter selve programmet
  69. ; Here the program starts
  70.  
  71.  
  72. Org 0h ; Programmer assembleres til at starte i adresse 0,
  73. ; der er adressen, der startes i ved reset !
  74.  
  75.  
  76. jmp start
  77.  
  78. ;Her er gjort plads til interruptvektorer. De, der skal bruges, skal Unmarkes.
  79.  
  80.  
  81.  
  82. ; ORG 03h ; Interrupt from extern interrupt 0
  83. ; jmp EX0int
  84.  
  85. ; ORG 0Bh ; Interrupt from Counter 0 overflow
  86. ; Jmp Timer0int ; Hop til timerrutine / Jump to subroutine
  87.  
  88. ; ORG 13h ; Interrupt from Extern interrupt 1
  89. ; jmp EX1int
  90.  
  91. ; ORG 1Bh ;Interrupt from timer 1
  92. ; jmp Timer ;Hop til timerrutine / Jump to subroutine
  93.  
  94. ; org 023h ; seriel interrupt vektor, udløst af RI eller TI
  95. ; jmp serint ; Created by RI or TI
  96.  
  97.  
  98.  
  99. Start:
  100. Org 30h ; her starter programmet
  101. mov sp, #30h ; flyt / Move stackpointer, default = 07h
  102.  
  103. Call LCD_init ; Start LCD-displayet op, og upload danske karakterer.
  104. ;
  105.  
  106. ; Programmet kan placeres her
  107.  
  108. Mit_program:
  109.  
  110. /*
  111.  
  112. Tekstbeskeder skrives fx. som følger:
  113.  
  114. Mov a, #00h ; 1. pos på linien, fra 0 til 19.
  115. call PCL2 ; PCL1 = Linie 1, PCL2 = Linie 2,
  116. mov dptr, #LCD_txt3 ; Datapointer points at text
  117. call LCD_Printstring ; Write message, terminated with a 0 ( Zero )
  118. ;----------
  119.  
  120.  
  121. */
  122.  
  123.  
  124. Loop: ; Stop programafvikling her.
  125. Jmp Loop ; Jmp $ betyder også "hop til samme linie"
  126.  
  127. ; Her kommer subrutiner::
  128.  
  129. ;***************************************
  130. ; Subrutiner til LC-Display Styring
  131. ; Subroutines for controlling the LCD
  132. ;***************************************
  133.  
  134. LCD_init: ; LCD initialiering
  135.  
  136. mov a,#50
  137. LCD_init_sleepsometime: ; Wait some time til displayet er initialiseret
  138. call LCD_ws
  139. djnz Acc,LCD_init_sleepsometime
  140.  
  141. ; Send styrekoder, for at LCD in itialiseres ved power on
  142. ; send control codes for initiating
  143.  
  144. clr LCD_RS
  145. clr LCD_RW
  146. clr LCD_ENABLE
  147. mov a,#00101000b
  148. call LCD_send_b
  149. setb LCD_ENABLE
  150. clr LCD_ENABLE
  151. mov a,#00101000b
  152. call LCD_send_b
  153. mov a,#1110b ;Cursor on !
  154. call LCD_send_b
  155. call LCD_clear
  156. ;
  157. mov a,#64
  158. call LCD_send_b
  159.  
  160. ; Send danske karakterer til LCD
  161.  
  162. mov DPTR,#LCD_cgram
  163. mov R0,#64
  164. LCD_cgram_label:
  165. clr a
  166. movc a,@A+DPTR
  167. inc DPTR
  168. call LCD_send_d
  169. djnz R0,LCD_cgram_label
  170. call LCD_returnhome
  171. ret
  172.  
  173. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  174.  
  175. LCD_returnhome: ; Kaldes for at flytte cursor til linie 1, 1. pos.
  176. push ACC ; Position the cursor line 1 position 1
  177. mov a,#128
  178. call LCD_send_b
  179. pop ACC
  180. ret
  181.  
  182. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  183.  
  184. LCD_clear: ; Sletter al tekst, & Curser Home !
  185. push ACC ; clear display
  186. mov a,#1
  187. call LCD_send_b
  188. pop ACC
  189. call Delay
  190. Ret
  191.  
  192. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  193.  
  194. Delay: mov R5, #15 ; short delay
  195. Delay1: mov R6, #25
  196. djnz R6, $
  197. djnz R5, Delay1
  198. Ret
  199.  
  200. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  201.  
  202. curser_on:
  203. mov a,#1110b ;Cursor on !
  204. call LCD_send_b
  205. ret
  206. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  207.  
  208. curser_off:
  209. mov a,#1100b ;Cursor off !
  210. call LCD_send_b
  211. ret
  212.  
  213. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  214.  
  215. LCD_printc: ; Sender en karakter i ACC
  216. ; send character in ACC
  217. call LCD_send_d
  218. ret
  219. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  220.  
  221. LCD_printstring: ; Skriver en String, der termineres med et 0, Bruger datapointeren DPTR
  222. ; Writes a string, terminated with "0". Uses the Data Pointer
  223. push ACC
  224. LCD_prints_anf:
  225. clr a
  226. movc a,@A+DPTR
  227. jz LCD_prints_weiter
  228.  
  229. ; tjek for danske karakterer
  230. Call Tjek_DK
  231. ; Print
  232. call LCD_printc
  233. inc DPTR
  234. jmp LCD_prints_anf
  235. LCD_prints_weiter:
  236. pop ACC
  237. ret
  238.  
  239. ;--------------------------
  240.  
  241. Tjek_DK: ; her tjekkes og korrigeres for danske karakterer
  242. ; Data er i reg A.
  243. cjne a, #'æ', Tjek_DK1
  244. mov a, #01h
  245. jmp Tjek_DK99 ; til bund af subrutine
  246. Tjek_DK1:
  247. cjne a, #'ø', Tjek_DK2
  248. mov a, #02h
  249. jmp Tjek_DK99 ; til bund af subrutine
  250. Tjek_DK2:
  251. cjne a, #'å', Tjek_DK3
  252. mov a, #03h
  253. jmp Tjek_DK99 ; til bund af subrutine
  254. Tjek_DK3:
  255. cjne a, #'Æ', Tjek_DK4
  256. mov a, #04h
  257. jmp Tjek_DK99 ; til bund af subrutine
  258. Tjek_DK4:
  259. cjne a, #'Ø', Tjek_DK5
  260. mov a, #05h
  261. jmp Tjek_DK99 ; til bund af subrutine
  262. Tjek_DK5:
  263. cjne a, #'Å', Tjek_DK6
  264. mov a, #06h
  265. Tjek_DK6:
  266. Tjek_DK99:
  267.  
  268. Ret
  269.  
  270. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  271.  
  272. LCD_send_b: ; sender styrekode i ACC til LCD, Til at indstille displayet !
  273. ; Send Commands in ACC, to control the LCD
  274. clr LCD_RS
  275. clr LCD_RW
  276. jmp LCD_send
  277.  
  278. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  279.  
  280. ;sender Data i Acc til LCD, Sender "ASCII". Det er dog således i
  281. ; realiteten, at der sendes en talværdi, på den adresse i LCD'ens
  282. ;ROM, hvori et mønster på et bogstav er gemt.
  283. ; De nederste 8 er udlagt i RAM, og det er heri, der kan downloades
  284. ; nationale karakterer.
  285. LCD_send_d:
  286. clr LCD_RW
  287. setb LCD_RS
  288. LCD_send:
  289. mov c,ACC.7 ; high-nibble sendes
  290. mov LCD_D7,c
  291. mov c,ACC.6
  292. mov LCD_D6,c
  293. mov c,ACC.5
  294. mov LCD_D5,c
  295. mov c,ACC.4
  296. mov LCD_D4,c
  297. ;
  298. setb LCD_ENABLE
  299. call LCD_ws
  300. clr LCD_ENABLE
  301. ;
  302. mov c,ACC.3 ; low-nibble sendes
  303. mov LCD_D7,c
  304. mov c,ACC.2
  305. mov LCD_D6,c
  306. mov c,ACC.1
  307. mov LCD_D5,c
  308. mov c,ACC.0
  309. mov LCD_D4,c
  310. ;
  311. setb LCD_ENABLE
  312. call LCD_ws
  313. clr LCD_ENABLE
  314. ret
  315.  
  316. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  317.  
  318. ; 1.64ms ventesløjfe / Wait 1.64 ms
  319. ; Antal maskincykler: 1640
  320. LCD_ws:
  321. push psw
  322. push 0
  323. mov 0,#232
  324. LCD_ws_labelA:
  325. nop
  326. nop
  327. nop
  328. nop
  329. nop
  330. djnz 0,LCD_ws_labelA
  331. nop
  332. nop
  333. pop 0
  334. pop psw
  335. ret
  336.  
  337. ;------------------------------------------------------
  338.  
  339. ; Subroutiner til at positionere cursoren:
  340. ; det, der står i displayet slettes ikke
  341. ; Subroutines for positioning the Cursor
  342. ; Content in A will move the cursor to that position on the line ( 0 - 19 d )
  343.  
  344. ;Subroutine til positionering af linie 1, 2, 3 eller 4. i LCD-display
  345.  
  346. ;Input: Indhold i Acc er X-værdi på linien ( 0 til 19 d ) !!
  347. ;
  348. PCL1: jmp PCL_99 ; Linie 1
  349.  
  350. PCL2: add a, #40h ; Linie 2
  351. jmp PCL_99
  352.  
  353. PCL3: add a, #14h ; Linie 3
  354. jmp PCL_99
  355.  
  356. PCL4: add a, #54h ; Linie 4
  357.  
  358. PCL_99: add a, #80h
  359. call lcd_send_b
  360. ret
  361.  
  362. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  363.  
  364. ;Eksempler på Tekstbeskeder, Max 20 karakterer pr linie
  365. ; De afsluttes med et '0'
  366. ; Examples of textmessages. Max 20 Char. pr. line
  367. ; Lines are terminated by "0"
  368.  
  369. ; LCD_txt1: db 'HTX S', 05h, 'NDERBORG',0 ; gammel !
  370. LCD_txt1a: db 'HTX SØNDERBORG',0
  371. LCD_txt2: db 'Extern display ',0
  372. LCD_txt3: db 'Indtast Nr ',0
  373. LCD_txt4: db 'Made by Valle ',0
  374. ;20 kar fylder:' ',
  375.  
  376. ;- - - - - - - - - - - - - - - - - - - - - - - - - - -
  377.  
  378. ; Koder til at downloade danske karakterer til LCD-en
  379. ; Codes for downloading danish characters to the LCD
  380. LCD_cgram:
  381. db 0,0,0,0,0,0,0,0 ; ej brugt
  382. db 0,0,26,5,15,20,31,0 ;æ 1
  383. db 0,1,14,21,21,14,16,0 ;ø 2
  384. db 4,0,14,1,15,17,15,0 ;å 3
  385. db 15,20,20,30,20,20,23,0 ;Æ 4
  386. db 1,14,19,21,25,14,16,0 ;Ø 5
  387. db 4,0,14,17,31,17,17,0 ;Å 6
  388. db 31,21,21,14,14,4,4,0 ;VT 7
  389.  
  390. ;-------------------------------------------------------
  391.  
  392. ; Pauserutine, Breack routine, Ca 1/4 sek.
  393.  
  394. Pause:
  395. Mov R6, #0ffh ;Flyt hex ff til register 6
  396. Pause1: mov r7, #0ffh
  397. djnz r7, $
  398. djnz R6, Pause1 ;Tæl ned med 1
  399. Ret
  400. ;---------------------------------
  401.  
  402. Kortpause: ; Ca ( 0.5 / 256 ) sek
  403. mov R7, #0FFh
  404. djnz R7, $
  405. ret
  406.  
  407. ;*************************************************************************************************
  408.  
  409. End
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.asm:8: error: label or instruction expected at start of line
prog.asm:9: error: parser: instruction expected
prog.asm:11: error: parser: instruction expected
prog.asm:12: error: parser: instruction expected
prog.asm:14: error: parser: instruction expected
prog.asm:15: error: parser: instruction expected
prog.asm:17: error: parser: instruction expected
prog.asm:18: error: parser: instruction expected
prog.asm:20: error: parser: instruction expected
prog.asm:22: error: parser: instruction expected
prog.asm:25: error: label or instruction expected at start of line
prog.asm:33: error: parser: instruction expected
prog.asm:72: error: parser: instruction expected
prog.asm:100: error: symbol `Org' redefined
prog.asm:100: error: parser: instruction expected
prog.asm:101: error: expression syntax error
prog.asm:110: error: label or instruction expected at start of line
prog.asm:112: error: parser: instruction expected
prog.asm:114: error: expression syntax error
prog.asm:116: error: expression syntax error
prog.asm:121: error: label or instruction expected at start of line
prog.asm:136: error: expression syntax error
prog.asm:139: error: parser: instruction expected
prog.asm:144: error: parser: instruction expected
prog.asm:145: error: symbol `clr' redefined
prog.asm:145: error: parser: instruction expected
prog.asm:146: error: symbol `clr' redefined
prog.asm:146: error: parser: instruction expected
prog.asm:147: error: expression syntax error
prog.asm:150: error: symbol `clr' redefined
prog.asm:150: error: parser: instruction expected
prog.asm:151: error: expression syntax error
prog.asm:153: error: expression syntax error
prog.asm:157: error: expression syntax error
prog.asm:162: error: expression syntax error
prog.asm:163: error: expression syntax error
prog.asm:165: error: symbol `clr' redefined
prog.asm:165: error: parser: instruction expected
prog.asm:166: error: parser: instruction expected
prog.asm:169: error: symbol `djnz' redefined
prog.asm:169: error: parser: instruction expected
prog.asm:177: error: expression syntax error
prog.asm:186: error: expression syntax error
prog.asm:194: error: expression syntax error
prog.asm:195: error: expression syntax error
prog.asm:196: error: symbol `djnz' redefined
prog.asm:196: error: parser: instruction expected
prog.asm:197: error: symbol `djnz' redefined
prog.asm:197: error: parser: instruction expected
prog.asm:203: error: expression syntax error
prog.asm:209: error: expression syntax error
prog.asm:225: error: symbol `clr' redefined
prog.asm:225: error: parser: instruction expected
prog.asm:226: error: symbol `movc' redefined
prog.asm:226: error: parser: instruction expected
prog.asm:243: error: parser: instruction expected
prog.asm:244: error: expression syntax error
prog.asm:247: error: symbol `cjne' redefined
prog.asm:247: error: parser: instruction expected
prog.asm:248: error: expression syntax error
prog.asm:251: error: symbol `cjne' redefined
prog.asm:251: error: parser: instruction expected
prog.asm:252: error: expression syntax error
prog.asm:255: error: symbol `cjne' redefined
prog.asm:255: error: parser: instruction expected
prog.asm:256: error: expression syntax error
prog.asm:259: error: symbol `cjne' redefined
prog.asm:259: error: parser: instruction expected
prog.asm:260: error: expression syntax error
prog.asm:263: error: symbol `cjne' redefined
prog.asm:263: error: parser: instruction expected
prog.asm:264: error: expression syntax error
prog.asm:274: error: symbol `clr' redefined
prog.asm:274: error: parser: instruction expected
prog.asm:275: error: symbol `clr' redefined
prog.asm:275: error: parser: instruction expected
prog.asm:286: error: symbol `clr' redefined
prog.asm:286: error: parser: instruction expected
prog.asm:300: error: symbol `clr' redefined
prog.asm:300: error: parser: instruction expected
prog.asm:313: error: symbol `clr' redefined
prog.asm:313: error: parser: instruction expected
prog.asm:323: error: expression syntax error
prog.asm:330: error: symbol `djnz' redefined
prog.asm:330: error: parser: instruction expected
prog.asm:350: error: expression syntax error
prog.asm:353: error: expression syntax error
prog.asm:356: error: expression syntax error
prog.asm:358: error: expression syntax error
prog.asm:395: error: expression syntax error
prog.asm:396: error: expression syntax error
prog.asm:397: error: symbol `djnz' redefined
prog.asm:397: error: parser: instruction expected
prog.asm:398: error: symbol `djnz' redefined
prog.asm:398: error: parser: instruction expected
prog.asm:403: error: expression syntax error
prog.asm:404: error: symbol `djnz' redefined
prog.asm:404: error: parser: instruction expected
stdout
Standard output is empty