Full Version : Starlight Simulator (ASM)
avr >>LIGHT & VISION PROJECTS >>Starlight Simulator (ASM)


Admin5- 04-20-2006
Starlight simulator

A simple program for generating a random PWM controlled slow 'flash' at eight different rates. It was used for lighting the collar of a tuxedo worn at a dressed party.

CODE

;CodeVisionAVR C Compiler V1.0.1.7b Standard
;(C) Copyright 1998-2001 Pavel Haiduc, HP InfoTech S.R.L.
;http://infotech.ir.ro
;e-mail:dhptechn@ir.ro , hpinfotech@mail.com

;Chip type           : AT90S2313
;Clock frequency     : 4,000000 MHz
;Memory model        : Tiny
;Optimize for        : Speed
;Internal SRAM size  : 128
;External SRAM size  : 0
;Data Stack size     : 32
;Promote char to int : No
;char is unsigned    : Yes
;Global #define      : Yes
;Automatic register allocation : On
;Use AVR Studio Terminal I/O   : No

.DEVICE AT90S2313
.LISTMAC
.EQU UDRE=0x5
.EQU RXC=0x7
.EQU UBRR=0x9
.EQU UCR=0xA
.EQU USR=0xB
.EQU UDR=0xC
.EQU EERE=0x0
.EQU EEWE=0x1
.EQU EEMWE=0x2
.EQU SPSR=0xE
.EQU SPDR=0xF
.EQU EECR=0x1C
.EQU EEDR=0x1D
.EQU EEARL=0x1E
.EQU EEARH=0x1F
.EQU WDTCR=0x21
.EQU MCUCR=0x35
.EQU RAMPZ=0x3B
.EQU SPL=0x3D
.EQU SPH=0x3E
.EQU SREG=0x3F
.DEF R0X2=R2
.DEF R0X3=R3
.DEF R0X4=R4
.DEF R0X5=R5
.DEF R0X6=R6
.DEF R0X7=R7
.DEF R0X8=R8
.DEF R0X9=R9
.DEF R0XA=R10
.DEF R0XB=R11
.DEF R0XC=R12
.DEF R0XD=R13
.DEF R0XE=R14
.DEF R0XF=R15
.DEF R0X10=R16
.DEF R0X11=R17
.DEF R0X12=R18
.DEF R0X13=R19
.DEF R0X14=R20
.DEF R0X15=R21
.DEF R0X1A=R26
.DEF R0X1B=R27
.DEF R0X1C=R28
.DEF R0X1D=R29
.DEF R0X1E=R30
.DEF R0X1F=R31
.EQU __se_bit=0x20
.EQU __sm_mask=0x10

.MACRO __CPD1N
CPI  R30,LOW(@0)
LDI  R26,HIGH(@0)
CPC  R31,R26
LDI  R26,BYTE3(@0)
CPC  R22,R26
LDI  R26,BYTE4(@0)
CPC  R23,R26
.ENDM

.MACRO __CPD2N
CPI  R26,LOW(@0)
LDI  R30,HIGH(@0)
CPC  R27,R30
LDI  R30,BYTE3(@0)
CPC  R24,R30
LDI  R30,BYTE4(@0)
CPC  R25,R30
.ENDM

.MACRO __CPWRR
CP   R@0,R@2
CPC  R@1,R@3
.ENDM

.MACRO __CPWRN
CPI  R@0,LOW(@2)
LDI  R30,HIGH(@2)
CPC  R@1,R30
.ENDM

.MACRO __ADDD1N
SUBI R30,LOW(-@0)
SBCI R31,HIGH(-@0)
SBCI R22,BYTE3(-@0)
SBCI R23,BYTE4(-@0)
.ENDM

.MACRO __ADDD2N
SUBI R26,LOW(-@0)
SBCI R27,HIGH(-@0)
SBCI R24,BYTE3(-@0)
SBCI R25,BYTE4(-@0)
.ENDM

.MACRO __SUBD1N
SUBI R30,LOW(@0)
SBCI R31,HIGH(@0)
SBCI R22,BYTE3(@0)
SBCI R23,BYTE4(@0)
.ENDM

.MACRO __SUBD2N
SUBI R26,LOW(@0)
SBCI R27,HIGH(@0)
SBCI R24,BYTE3(@0)
SBCI R25,BYTE4(@0)
.ENDM

.MACRO __ANDD1N
ANDI R30,LOW(@0)
ANDI R31,HIGH(@0)
ANDI R22,BYTE3(@0)
ANDI R23,BYTE4(@0)
.ENDM

.MACRO __ORD1N
ORI  R30,LOW(@0)
ORI  R31,HIGH(@0)
ORI  R22,BYTE3(@0)
ORI  R23,BYTE4(@0)
.ENDM

.MACRO __DELAY_USB
LDI  R24,LOW(@0)
__DELAY_USB_LOOP:
DEC  R24
BRNE __DELAY_USB_LOOP
.ENDM

.MACRO __DELAY_USW
LDI  R24,LOW(@0)
LDI  R25,HIGH(@0)
__DELAY_USW_LOOP:
SBIW R24,1
BRNE __DELAY_USW_LOOP
.ENDM

.MACRO __CLRD1S
CLR  R30
STD  Y+@0,R30
STD  Y+@0+1,R30
STD  Y+@0+2,R30
STD  Y+@0+3,R30
.ENDM

.MACRO __GETD1S
LDD  R30,Y+@0
LDD  R31,Y+@0+1
LDD  R22,Y+@0+2
LDD  R23,Y+@0+3
.ENDM

.MACRO __PUTD1S
STD  Y+@0,R30
STD  Y+@0+1,R31
STD  Y+@0+2,R22
STD  Y+@0+3,R23
.ENDM

.MACRO __POINTB1MN
LDI  R30,LOW(@0+@1)
.ENDM

.MACRO __POINTW1MN
LDI  R30,LOW(@0+@1)
LDI  R31,HIGH(@0+@1)
.ENDM

.MACRO __POINTW1FN
LDI  R30,LOW(2*@0+@1)
LDI  R31,HIGH(2*@0+@1)
.ENDM

.MACRO __POINTB2MN
LDI  R26,LOW(@0+@1)
.ENDM

.MACRO __POINTW2MN
LDI  R26,LOW(@0+@1)
LDI  R27,HIGH(@0+@1)
.ENDM

.MACRO __GETD1N
LDI  R30,LOW(@0)
LDI  R31,HIGH(@0)
LDI  R22,BYTE3(@0)
LDI  R23,BYTE4(@0)
.ENDM

.MACRO __GETD2N
LDI  R26,LOW(@0)
LDI  R27,HIGH(@0)
LDI  R24,BYTE3(@0)
LDI  R25,BYTE4(@0)
.ENDM

.MACRO __GETD2S
LDD  R26,Y+@0
LDD  R27,Y+@0+1
LDD  R24,Y+@0+2
LDD  R25,Y+@0+3
.ENDM

.MACRO __GETB1MN
LDS  R30,@0+@1
.ENDM

.MACRO __GETW1MN
LDS  R30,@0+@1
LDS  R31,@0+@1+1
.ENDM

.MACRO __GETD1MN
LDS  R30,@0+@1
LDS  R31,@0+@1+1
LDS  R22,@0+@1+2
LDS  R23,@0+@1+3
.ENDM

.MACRO __GETBRMN
LDS  R@2,@0+@1
.ENDM

.MACRO __GETWRMN
LDS  R@2,@0+@1
LDS  R@3,@0+@1+1
.ENDM

.MACRO __GETB2MN
LDS  R26,@0+@1
.ENDM

.MACRO __GETW2MN
LDS  R26,@0+@1
LDS  R27,@0+@1+1
.ENDM

.MACRO __GETD2MN
LDS  R26,@0+@1
LDS  R27,@0+@1+1
LDS  R24,@0+@1+2
LDS  R25,@0+@1+3
.ENDM

.MACRO __PUTB1MN
STS  @0+@1,R30
.ENDM

.MACRO __PUTW1MN
STS  @0+@1,R30
STS  @0+@1+1,R31
.ENDM

.MACRO __PUTD1MN
STS  @0+@1,R30
STS  @0+@1+1,R31
STS  @0+@1+2,R22
STS  @0+@1+3,R23
.ENDM

.MACRO __PUTBMRN
STS  @0+@1,R@2
.ENDM

.MACRO __PUTWMRN
STS  @0+@1,R@2
STS  @0+@1+1,R@3
.ENDM

.MACRO __GETW1R
MOV  R30,R@0
MOV  R31,R@1
.ENDM

.MACRO __GETW2R
MOV  R26,R@0
MOV  R27,R@1
.ENDM

.MACRO __GETWRN
LDI  R@0,LOW(@2)
LDI  R@1,HIGH(@2)
.ENDM

.MACRO __PUTW1R
MOV  R@0,R30
MOV  R@1,R31
.ENDM

.MACRO __ADDWRN
SUBI R@0,LOW(-@2)
SBCI R@1,HIGH(-@2)
.ENDM

.MACRO __ADDWRR
ADD  R@0,R@2
ADC  R@1,R@3
.ENDM

.MACRO __SUBWRN
SUBI R@0,LOW(@2)
SBCI R@1,HIGH(@2)
.ENDM

.MACRO __SUBWRR
SUB  R@0,R@2
SBC  R@1,R@3
.ENDM

.MACRO __ANDWRN
ANDI R@0,LOW(@2)
ANDI R@1,HIGH(@2)
.ENDM

.MACRO __ANDWRR
AND  R@0,R@2
AND  R@1,R@3
.ENDM

.MACRO __ORWRN
ORI  R@0,LOW(@2)
ORI  R@1,HIGH(@2)
.ENDM

.MACRO __ORWRR
OR   R@0,R@2
OR   R@1,R@3
.ENDM

.MACRO __EORWRR
EOR  R@0,R@2
EOR  R@1,R@3
.ENDM

.MACRO __GETWRS
LDD  R@0,Y+@2
LDD  R@1,Y+@2+1
.ENDM

.MACRO __PUTWSR
STD  Y+@2,R@0
STD  Y+@2+1,R@1
.ENDM

.MACRO __MOVEWRR
MOV  R@0,R@2
MOV  R@1,R@3
.ENDM

.MACRO __INWR
IN   R@0,@2
IN   R@1,@2+1
.ENDM

.MACRO __OUTWR
OUT  @2+1,R@1
OUT  @2,R@0
.ENDM

.MACRO __CALL1MN
LDS  R30,@0+@1
LDS  R31,@0+@1+1
ICALL
.ENDM

.MACRO __NBST
BST  R@0,@1
IN   R30,SREG
LDI  R31,0x40
EOR  R30,R31
OUT  SREG,R30
.ENDM


.CSEG
.ORG 0x0B

.INCLUDE "night.inc"

__RESET:
CLI
CLR  R30
OUT  EECR,R30

;DISABLE WATCHDOG
LDI  R31,0x18
OUT  WDTCR,R31
LDI  R31,0x10
OUT  WDTCR,R31
OUT  MCUCR,R30

;CLEAR R2-R15
LDI  R24,14
LDI  R26,2
__CLEAR_REG:
ST   X+,R30
DEC  R24
BRNE __CLEAR_REG

;CLEAR SRAM
LDI  R24,LOW(0x80)
LDI  R26,0x60
__CLEAR_SRAM:
ST   X+,R30
DEC  R24
BRNE __CLEAR_SRAM

;GLOBAL VARIABLES INITIALIZATION
LDI  R30,LOW(__GLOBAL_INI_TBL*2)
LDI  R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
LPM
MOV  R1,R0
ADIW R30,1
LPM
ADIW R30,1
MOV  R22,R30
MOV  R23,R31
MOV  R31,R0
MOV  R30,R1
SBIW R30,0
BREQ __GLOBAL_INI_END
LPM
MOV  R26,R0
ADIW R30,1
LPM
MOV  R27,R0
ADIW R30,1
LPM
MOV  R24,R0
ADIW R30,1
LPM
MOV  R25,R0
ADIW R30,1
__GLOBAL_INI_LOOP:
LPM
ST   X+,R0
ADIW R30,1
SBIW R24,1
BRNE __GLOBAL_INI_LOOP
MOV  R30,R22
MOV  R31,R23
RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:

;STACK POINTER INITIALIZATION
LDI  R30,LOW(0xDF)
OUT  SPL,R30

;DATA STACK POINTER INITIALIZATION
LDI  R28,LOW(0x7F)

RJMP _main

.ESEG
.ORG 1

.DSEG
.ORG 0x80
;       1 /*********************************************
;       2 This program was produced by the
;       3 CodeWizardAVR V1.0.1.7b Standard
;       4 Automatic Program Generator
;       5 © Copyright 1998-2001
;       6 Pavel Haiduc, HP InfoTech S.R.L.
;       7 http://infotech.ir.ro
;       8 e-mail:dhptechn@ir.ro , hpinfotech@mail.com
;       9
;      10 Project :
;      11 Version :
;      12 Date    : 16-10-2001
;      13 Author  : License #1 Universiteit  Twente
;      14 Company : 7522 NH Enschede, Nederland    
;      15 Comments:
;      16
;      17
;      18 Chip type           : AT90S2313
;      19 Clock frequency     : 4,000000 MHz
;      20 Memory model        : Tiny
;      21 Internal SRAM size  : 128
;      22 External SRAM size  : 0
;      23 Data Stack size     : 32
;      24 *********************************************/
;      25
;      26 #include <90s2313.h>
;      27 // CodeVisionAVR C Compiler
;      28 // (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.
;      29
;      30 // I/O registers definitions for the AT90S2313
;      31
;      32 #ifndef _90S2313_INCLUDED_
;      33 #define _90S2313_INCLUDED_
;      34
;      35 #pragma used+
;      36 sfrb ACSR=8;
;      37 sfrb UBRR=9;
;      38 sfrb UCR=0xa;
;      39 sfrb USR=0xb;
;      40 sfrb UDR=0xc;
;      41 sfrb PIND=0x10;
;      42 sfrb DDRD=0x11;
;      43 sfrb PORTD=0x12;
;      44 sfrb PINB=0x16;
;      45 sfrb DDRB=0x17;
;      46 sfrb PORTB=0x18;
;      47 sfrb EECR=0x1c;
;      48 sfrb EEDR=0x1d;
;      49 sfrb EEAR=0x1e;
;      50 sfrb WDTCR=0x21;
;      51 sfrb ICR1L=0x24;
;      52 sfrb ICR1H=0x25;
;      53 sfrw ICR1=0x24;   // 16 bit access
;      54 sfrb OCR1L=0x2a;
;      55 sfrb OCR1H=0x2b;
;      56 sfrw OCR1=0x2a;   // 16 bit access
;      57 sfrb TCNT1L=0x2c;
;      58 sfrb TCNT1H=0x2d;
;      59 sfrw TCNT1=0x2c;  // 16 bit access
;      60 sfrb TCCR1B=0x2e;
;      61 sfrb TCCR1A=0x2f;
;      62 sfrb TCNT0=0x32;
;      63 sfrb TCCR0=0x33;
;      64 sfrb MCUSR=0x34;
;      65 sfrb MCUCR=0x35;
;      66 sfrb TIFR=0x38;
;      67 sfrb TIMSK=0x39;
;      68 sfrb GIFR=0x3a;
;      69 sfrb GIMSK=0x3b;
;      70 sfrb SPL=0x3d;
;      71 sfrb SREG=0x3f;
;      72 #pragma used-
;      73
;      74 #define OCR1AL OCR1L
;      75 #define OCR1AH OCR1H
;      76
;      77 // Interrupt vectors definitions
;      78
;      79 #define EXT_INT0 2
;      80 #define EXT_INT1 3
;      81 #define TIM1_CAPT 4
;      82 #define TIM1_COMP 5
;      83 #define TIM1_OVF 6
;      84 #define TIM0_OVF 7
;      85 #define UART_RXC 8
;      86 #define UART_DRE 9
;      87 #define UART_TXC 10
;      88 #define ANA_COMP 11
;      89
;      90 #endif
;      91
;      92 unsigned char n = 0x00;
;      93 char p,q,r,s,t;
;      94 bit up = 1;
;      95 bit op = 1;
;      96 bit ep = 1;
;      97 bit ip = 1;
;      98 bit ap = 1;
;      99 char een,eentemp,twee,tweetemp,drie,drietemp,vier,viertemp,vijf,vijftemp,zes,zestemp,zeven,zeventemp,acht,achttemp;
_vier:
.BYTE 0x1
_viertemp:
.BYTE 0x1
_vijf:
.BYTE 0x1
_vijftemp:
.BYTE 0x1
_zes:
.BYTE 0x1
_zestemp:
.BYTE 0x1
_zeven:
.BYTE 0x1
_zeventemp:
.BYTE 0x1
_acht:
.BYTE 0x1
_achttemp:
.BYTE 0x1
;     100
;     101 // Timer 0 overflow interrupt service routine
;     102 interrupt [TIM0_OVF] void timer0_ovf_isr(void)
;     103 {

.CSEG
_timer0_ovf_isr:
RCALL __SAVEISR
;     104 #asm ("cli")
cli
;     105 // Reinitialize Timer's 0 value
;     106 TCNT0=0x38;
LDI  R30,LOW(56)
OUT  0x32,R30
;     107
;     108 // Place your code here
;     109 n++;
INC  R4
;     110 if (n>100){
LDI  R30,LOW(100)
CP   R30,R4
BRSH _0x2
;     111   n = 0;
CLR  R4
;     112   PORTB=0x00;
CLR  R30
OUT  0x18,R30
;     113   eentemp = een;
MOV  R11,R10
;     114  tweetemp = twee;
MOV  R13,R12
;     115  drietemp = drie;
MOV  R15,R14
;     116  viertemp = vier;
LDS  R30,_vier
STS  _viertemp,R30
;     117  vijftemp = vijf;
LDS  R30,_vijf
STS  _vijftemp,R30
;     118  zestemp = zes;
LDS  R30,_zes
STS  _zestemp,R30
;     119  zeventemp = zeven;
LDS  R30,_zeven
STS  _zeventemp,R30
;     120  achttemp = acht;
LDS  R30,_acht
STS  _achttemp,R30
;     121  }
;     122 --eentemp;
_0x2:
DEC  R11
;     123 --tweetemp;
DEC  R13
;     124 drietemp--;
DEC  R15
;     125 viertemp--;
LDS  R30,_viertemp
SUBI R30,1
STS  _viertemp,R30
;     126 vijftemp--;
LDS  R30,_vijftemp
SUBI R30,1
STS  _vijftemp,R30
;     127 zestemp--;
LDS  R30,_zestemp
SUBI R30,1
STS  _zestemp,R30
;     128 zeventemp--;
LDS  R30,_zeventemp
SUBI R30,1
STS  _zeventemp,R30
;     129 achttemp--;
LDS  R30,_achttemp
SUBI R30,1
STS  _achttemp,R30
;     130 if (eentemp == 1) PORTB.0 = 1;
LDI  R30,LOW(1)
CP   R30,R11
BRNE _0x3
SBI  0x18,0
;     131 if (tweetemp == 1) PORTB.1 = 1;
_0x3:
LDI  R30,LOW(1)
CP   R30,R13
BRNE _0x4
SBI  0x18,1
;     132 if (drietemp == 1) PORTB.2 = 1;
_0x4:
LDI  R30,LOW(1)
CP   R30,R15
BRNE _0x5
SBI  0x18,2
;     133 if (viertemp == 1) PORTB.3 = 1;
_0x5:
LDS  R26,_viertemp
CPI  R26,LOW(0x1)
BRNE _0x6
SBI  0x18,3
;     134 if (vijftemp == 1) PORTB.4 = 1;
_0x6:
LDS  R26,_vijftemp
CPI  R26,LOW(0x1)
BRNE _0x7
SBI  0x18,4
;     135 if (zestemp == 1) PORTB.5 = 1;
_0x7:
LDS  R26,_zestemp
CPI  R26,LOW(0x1)
BRNE _0x8
SBI  0x18,5
;     136 if (zeventemp == 1) PORTB.6 = 1;
_0x8:
LDS  R26,_zeventemp
CPI  R26,LOW(0x1)
BRNE _0x9
SBI  0x18,6
;     137 if (achttemp == 1) PORTB.7 = 1;
_0x9:
LDS  R26,_achttemp
CPI  R26,LOW(0x1)
BRNE _0xA
SBI  0x18,7
;     138
;     139 #asm("sei")
_0xA:
sei
;     140 }
RCALL __LOADISR
RETI
;     141
;     142 // Timer 1 overflow interrupt service routine
;     143 interrupt [TIM1_OVF] void timer1_ovf_isr(void)
;     144 {
_timer1_ovf_isr:
RCALL __SAVEISR
;     145 #asm("cli")
cli
;     146 // Reinitialize Timer's 1 value
;     147 TCNT1H=0xFF;
LDI  R30,LOW(255)
OUT  0x2D,R30
;     148 TCNT1L=0x3D;
LDI  R30,LOW(61)
OUT  0x2C,R30
;     149 if (up) {
SBRS R2,0
RJMP _0xC
;     150  p++;
INC  R5
;     151  if (p>20)
LDI  R30,LOW(20)
CP   R30,R5
BRSH _0xD
;     152   {
;     153   up = 0;
CLT
BLD  R2,0
;     154   p = 20;
MOV  R5,R30
;     155   }
;     156  }
_0xD:
;     157 if (!up){
_0xC:
SBRC R2,0
RJMP _0xE
;     158  p--;
DEC  R5
;     159  if (p<1)
LDI  R30,LOW(1)
CP   R5,R30
BRSH _0xF
;     160   {
;     161   up = 1;
SET
BLD  R2,0
;     162   p = 1;
MOV  R5,R30
;     163   }
;     164  }
_0xF:
;     165 if (op) {
_0xE:
SBRS R2,1
RJMP _0x10
;     166  q++;
INC  R6
;     167  if (q>25)
LDI  R30,LOW(25)
CP   R30,R6
BRSH _0x11
;     168   {
;     169   op = 0;
CLT
BLD  R2,1
;     170   q = 25;
MOV  R6,R30
;     171   }
;     172  }
_0x11:
;     173 if (!op){
_0x10:
SBRC R2,1
RJMP _0x12
;     174  q--;
DEC  R6
;     175  if (q<1)
LDI  R30,LOW(1)
CP   R6,R30
BRSH _0x13
;     176   {
;     177   op = 1;
SET
BLD  R2,1
;     178   q = 1;
MOV  R6,R30
;     179   }
;     180  }
_0x13:
;     181 if (ep) {
_0x12:
SBRS R2,2
RJMP _0x14
;     182  r++;
INC  R7
;     183  if (r>16)
LDI  R30,LOW(16)
CP   R30,R7
BRSH _0x15
;     184   {
;     185   ep = 0;
CLT
BLD  R2,2
;     186   r = 16;
MOV  R7,R30
;     187   }
;     188  }
_0x15:
;     189 if (!ep){
_0x14:
SBRC R2,2
RJMP _0x16
;     190  r--;
DEC  R7
;     191  if (r<1)
LDI  R30,LOW(1)
CP   R7,R30
BRSH _0x17
;     192   {
;     193   ep = 1;
SET
BLD  R2,2
;     194   r = 1;
MOV  R7,R30
;     195   }
;     196  }
_0x17:
;     197 if (ip) {
_0x16:
SBRS R2,3
RJMP _0x18
;     198  s++;
INC  R8
;     199  if (s>33)
LDI  R30,LOW(33)
CP   R30,R8
BRSH _0x19
;     200   {
;     201   ip = 0;
CLT
BLD  R2,3
;     202   s = 33;
MOV  R8,R30
;     203   }
;     204  }
_0x19:
;     205 if (!ip){
_0x18:
SBRC R2,3
RJMP _0x1A
;     206  s--;
DEC  R8
;     207  if (s<1)
LDI  R30,LOW(1)
CP   R8,R30
BRSH _0x1B
;     208   {
;     209   ip = 1;
SET
BLD  R2,3
;     210   s = 1;
MOV  R8,R30
;     211   }
;     212  }
_0x1B:
;     213 if (ap) {
_0x1A:
SBRS R2,4
RJMP _0x1C
;     214  t++;
INC  R9
;     215  if (t>20)
LDI  R30,LOW(20)
CP   R30,R9
BRSH _0x1D
;     216   {
;     217   ap = 0;
CLT
BLD  R2,4
;     218   t = 20;
MOV  R9,R30
;     219   }
;     220  }
_0x1D:
;     221 if (!ap){
_0x1C:
SBRC R2,4
RJMP _0x1E
;     222  t--;
DEC  R9
;     223  if (t<1)
LDI  R30,LOW(1)
CP   R9,R30
BRSH _0x1F
;     224   {
;     225   ap = 1;
SET
BLD  R2,4
;     226   t = 1;
MOV  R9,R30
;     227   }
;     228  }
_0x1F:
;     229 een = 5*p;
_0x1E:
MOV  R30,R5
LDI  R26,LOW(5)
RCALL __MULB12U
MOV  R10,R30
;     230 twee = 4*q;
MOV  R30,R6
LSL  R30
LSL  R30
MOV  R12,R30
;     231 drie = 6*r;
MOV  R30,R7
LDI  R26,LOW(6)
RCALL __MULB12U
MOV  R14,R30
;     232 vier = 3*s;
MOV  R30,R8
LDI  R26,LOW(3)
RCALL __MULB12U
STS  _vier,R30
;     233 vijf = 5*t;
MOV  R30,R9
LDI  R26,LOW(5)
RCALL __MULB12U
STS  _vijf,R30
;     234 zes = 5*p;
MOV  R30,R5
LDI  R26,LOW(5)
RCALL __MULB12U
STS  _zes,R30
;     235 zeven = 4*q;
MOV  R30,R6
LSL  R30
LSL  R30
STS  _zeven,R30
;     236 acht = 6*r;
MOV  R30,R7
LDI  R26,LOW(6)
RCALL __MULB12U
STS  _acht,R30
;     237
;     238 #asm("sei")
sei
;     239 }
RCALL __LOADISR
RETI
;     240
;     241 // Declare your global variables here
;     242
;     243 void main(void)
;     244 {
_main:
;     245 // Declare your local variables here
;     246
;     247 // Input/Output Ports initialization
;     248 // Port B
;     249 PORTB=0xFF;
LDI  R30,LOW(255)
OUT  0x18,R30
;     250 DDRB=0xFF;
OUT  0x17,R30
;     251
;     252 // Port D
;     253 PORTD=0x7F;
LDI  R30,LOW(127)
OUT  0x12,R30
;     254 DDRD=0x7F;
OUT  0x11,R30
;     255
;     256 // Timer/Counter 0 initialization
;     257 // Clock source: System Clock
;     258 // Clock value: 4000,000 kHz
;     259 // Mode: Output Compare
;     260 // OC0 output: Disconnected
;     261 TCCR0=0x01;
LDI  R30,LOW(1)
OUT  0x33,R30
;     262 TCNT0=0x38;
LDI  R30,LOW(56)
OUT  0x32,R30
;     263
;     264 // Timer/Counter 1 initialization
;     265 // Clock source: System Clock
;     266 // Clock value: 3,906 kHz
;     267 // Mode: Output Compare
;     268 // OC1 output: Discon.
;     269 // Noise Canceler: Off
;     270 // Input Capture on Falling Edge
;     271 TCCR1A=0x00;
CLR  R30
OUT  0x2F,R30
;     272 TCCR1B=0x05;
LDI  R30,LOW(5)
OUT  0x2E,R30
;     273 TCNT1H=0xFE;
LDI  R30,LOW(254)
OUT  0x2D,R30
;     274 TCNT1L=0x7A;
LDI  R30,LOW(122)
OUT  0x2C,R30
;     275 OCR1H=0x00;
CLR  R30
OUT  0x2B,R30
;     276 OCR1L=0x00;
OUT  0x2A,R30
;     277
;     278 // External Interrupt(s) initialization
;     279 // INT0: Off
;     280 // INT1: Off
;     281 GIMSK=0x00;
OUT  0x3B,R30
;     282 MCUCR=0x00;
OUT  0x35,R30
;     283
;     284 // Timer(s)/Counter(s) Interrupt(s) initialization
;     285 TIMSK=0x82;
LDI  R30,LOW(130)
OUT  0x39,R30
;     286
;     287 // Analog Comparator initialization
;     288 // Analog Comparator: Off
;     289 // Analog Comparator Input Capture by Timer/Counter 1: Off
;     290 ACSR=0x80;
LDI  R30,LOW(128)
OUT  0x8,R30
;     291
;     292 // Global enable interrupts
;     293 #asm("sei")
sei
;     294 p=1;
LDI  R30,LOW(1)
MOV  R5,R30
;     295 q=4;
LDI  R30,LOW(4)
MOV  R6,R30
;     296 r=8;
LDI  R30,LOW(8)
MOV  R7,R30
;     297 s=12;
LDI  R30,LOW(12)
MOV  R8,R30
;     298 t=16;
LDI  R30,LOW(16)
MOV  R9,R30
;     299 while (1)
_0x21:
;     300       {
;     301       // Place your code here
;     302
;     303       };
RJMP _0x21
;     304 }
RET

__SAVEISR:
ST   -Y,R0
ST   -Y,R1
ST   -Y,R22
ST   -Y,R23
ST   -Y,R24
ST   -Y,R25
ST   -Y,R26
ST   -Y,R27
ST   -Y,R30
ST   -Y,R31
IN   R0,SREG
ST   -Y,R0
RET

__LOADISR:
LD   R0,Y+
OUT  SREG,R0
LD   R31,Y+
LD   R30,Y+
LD   R27,Y+
LD   R26,Y+
LD   R25,Y+
LD   R24,Y+
LD   R23,Y+
LD   R22,Y+
LD   R1,Y+
LD   R0,Y+
RET

__MULB12U:
MOV  R0,R26
SUB  R26,R26
LDI  R27,9
RJMP __MULB12U1
__MULB12U3:
BRCC __MULB12U2
ADD  R26,R0
__MULB12U2:
LSR  R26
__MULB12U1:
ROR  R30
DEC  R27
BRNE __MULB12U3
RET

.ORG 0

;INTERRUPT VECTORS
RJMP __RESET
RJMP 0
RJMP 0
RJMP 0
RJMP 0
RJMP _timer1_ovf_isr
RJMP _timer0_ovf_isr
RJMP 0
RJMP 0
RJMP 0
RJMP 0




Forumer™ is Voted #1 Free Forum Hosting provider
Build your own community today with the largest message board hosting company.