bentaih la vie ne apprend encore | printf a écrit :
C'est déjà mieux
Par contre, si tu veux compléter un message, tu peux l'éditer en cliquant sur l'icône appropriée. C'est beaucoup mieux que de poster plusieurs messages à la suite.
Sinon, pour ton problème : le mieux est que tu donne le code source ici (en prenant bien soin de le placer entre des balises C/C++), ou que tu indique l'URL qui permet de le récupérer. Même si nous ne connaissons pas les spécificités du langage d'assemblage Atmel, nous pourrons peut-être essayer de faire quelque chose. Mais il faut bien comprendre que tu dois mâcher le travail le plus possible si tu veux être aidé (en donnant des liens vers les documentations/datasheets nécessaires, etc.).
|
oooooooops j'ai oublier de la coller ds le message précédent le voila il est un peu long .DEF SAVE_STATUS = R1 ;
.DEF EERTMP = R2 ;
.DEF EE_DRDS = R3 ;
.DEF COUNTER = R16 ;
.DEF COUNTER_NEXT = R17 ;
.DEF COUNTER_NEXT1 = R20 ;
.DEF FLASH_FLAG = R21 ;
.DEF COUNT1 = R18 ;UNITS OF MINUTES
.DEF COUNT2 = R19 ;TENS OF MINUTES
.DEF COUNT1_RESULT = R20
.DEF COUNT2_RESULT = R21
.DEF DURATION = R22
.DEF DURATION1 = R23
.DEF SECONDS = R24
;
.DEF TEMP = R25
.DEF FLAG_1 = R26
.DEF TIME_OUT = R28 ;R27
;
.DEF REG_LOW = R30
.DEF REG_HIGH = R31 ;===========================================================================
.EQU ALARM_SET = 01 ;
.EQU LED_SET = 01 ; IDENTICAL TO "ALARM_SET"
;==========================================================================
.include "1200def.inc"
;============================================================================
.ESEG
; ('LPM' DOESN'T WORK ON 1200AVR CHIP.)
; TO BE LOADED IN EEROM MANUALLY OR AUTOMATICALLY VIA AVR PROGRAMMER SOFTWARE
; - WE DID THE FORMER! (EEROM ADDRESS $0000 - $000A
TABLE:
;============================================================================
; 0 1 2 3 4 5 6 7 8 9 -
;----------------------------------------------------------------------------
.DB $3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$67,$01
;============================================================================
.CSEG
.ORG 0
RJMP RESET ;Reset Handle
.ORG 1
RETI
.ORG 2
RJMP TIMER0_INT_ROUTINE
;===========================================================================
.ORG $0030
RESET:
LDI TEMP,0B00000100 ;DIV 256 OUT TCCR0,TEMP ; SER TEMP ;PORTB OUTPUTS
OUT DDRB,TEMP ; LDI TEMP,0B11100011 ;BIT 0,1,5,6, = O/P; BIT 7 = N/A
OUT DDRD,TEMP ;BIT 2,3,4 = I/P
LDI TEMP, 2 ;Set the TOIE0 bit to enable OUT TIMSK, TEMP ;the Timer0 Interrupt to occur
CLI ;DISABLE INTERRUPTS
LDI TIME_OUT,$00 ;COUNT FOR SECOND UP
CLR SECONDS ;SECONDS COUNT
CLR FLAG_1 ;
SBI PORTD,ALARM_SET ;TURN OFF LED SBI PORTB,7 ;TURN OFF BUZZER
;============================================================================
CLR COUNT1 ; CLEAR LED DISPLAY
CLR COUNT2 ; BOTH DIGITS
;============================================================================
WAIT_FOR_KEYPRESS:
CLI ; CLR FLAG_1 ;
SBI PORTD,ALARM_SET ;LED OFF SBIS PIND,4 ;
RCALL INC_DISP_1 ;
;
SBIS PIND,3 ;
RCALL INC_DISP_2 ;
;
RCALL GET_SEVEN_SEGMENT ;
RCALL DISPLAY_IT ;
SBI PORTB,7 ;TURN OFF BUZZER
SBIC PIND,2 ;
RJMP WAIT_FOR_KEYPRESS ;
WAIT:
RCALL GET_SEVEN_SEGMENT ;
RCALL DISPLAY_IT ;
SBI PORTB,7 ;TURN OFF BUZZER
;
SBIS PIND,2 ;
RJMP WAIT ;
LOOP_LOOP:
CBI PORTD,ALARM_SET ; SEI ; SER FLAG_1 ;
;
WAIT_HERE:
CLI
CBI PORTD,LED_SET ; RCALL GET_SEVEN_SEGMENT
RCALL DISPLAY_IT
SBI PORTB,7 ;TURN OFF BUZZER
SEI
NOP
RCALL DELAY
RJMP WAIT_HERE ;
;============================================================================
INC_DISP_1:
INC COUNT1
CPI COUNT1,$0A
BREQ MAKE_COUNT1_ZERO
RJMP LOOP_ONE
MAKE_COUNT1_ZERO:
CLR COUNT1
LOOP_ONE:
RCALL DELAY SBIS PIND,4
RJMP LOOP_ONE
RET
;============================================================================
INC_DISP_2:
INC COUNT2
CPI COUNT2,$0A
BREQ MAKE_COUNT2_ZERO
RJMP LOOP_TWO
MAKE_COUNT2_ZERO:
CLR COUNT2
LOOP_TWO:
RCALL DELAY SBIS PIND,3
RJMP LOOP_TWO
RET
;============================================================================
;============================================================================
;================ INTERRUPT ROUTINE =======================================
TIMER0_INT_ROUTINE:
CLI ;DISABLE INTERRUPT
;
SBI PORTB,7 ;TURN OFF BUZZER
CBI PORTD,ALARM_SET ;LED ON
RCALL DISPLAY_DIGITS ;SHOW IT ON LED DISPLAY
;
RCALL CONVERT_TO_BCD ;
;
CPI FLAG_1,$FF ;START BUTTON PRESSSED?
BRNE ALARM_NOT_SET_YET ;
;
CBI PORTD,ALARM_SET ;LED OFF ;
;
CPI COUNT1, 00 ;
BRNE NOT_ZERO ;
CPI COUNT2, 00 ;
BRNE NOT_ZERO ;
RJMP TIME_UP ; EXIT WITH INTERRUPT DISABLED
ALARM_NOT_SET_YET:
NOT_ZERO:
SEI
RETI
;============================================================================
CONVERT_TO_BCD:
IN SAVE_STATUS, SREG ;
KEEP_GOING:
SUBI COUNT1, $0A ;
BRCS LESS_THEN_TEN ;IF $0A > COUNT1, CARRY IS SET!
;IF COUNT1 > $0A CONTINUE SUBI COUNT2,$0A ;UPPER BYTE < 10 ?
BRCS LESS_THEN_TEN_AS_WELL ;WAS BRCC
IS_ZERO:
OUT SREG, SAVE_STATUS ;
RET ;
LESS_THEN_TEN_AS_WELL:
LDI TEMP, $0A ;
ADD COUNT2,TEMP ;
RJMP KEEP_GOING ;
LESS_THEN_TEN:
LDI TEMP, $0A ;
ADD COUNT1,TEMP ;
OUT SREG, SAVE_STATUS ;
RET
;============================================================================
GET_SEVEN_SEGMENT:
;
IN SAVE_STATUS, SREG ;
LDI TEMP, TABLE - 1 ;
ADD TEMP,COUNT1 ;
OUT EEAR, TEMP ; ADDRESS OF TABLE
RCALL EEREAD_IT ;GET BYTE FROM EEPROM
MOV COUNT1_RESULT,EE_DRDS ; V COUNT1_RESULT,EE_DRDS ;
;
;
LDI TEMP, TABLE - 1 ;
ADD TEMP,COUNT2 ;
OUT EEAR, TEMP ; ADDRESS OF TABLE
RCALL EEREAD_IT ;GET BYTE FROM EEPROM
MOV COUNT2_RESULT,EE_DRDS ;
OUT SREG,SAVE_STATUS ;
RET
;============================================================================
DISPLAY_IT:
IN SAVE_STATUS, SREG ;
COM COUNT1_RESULT ; LOW BYTE
COM COUNT2_RESULT ; HIGH BYTE
OUT PORTB,COUNT1_RESULT ; DISPLAY DIGIT1
SBI PORTB,7 ; TURN OFF BUZZER
CBI PORTD,5 ; TURN ON DIGIT 1
SBI PORTD,6 ; TURN OFF DIGIT 2
;
RCALL LONG_DELAY ;
;
OUT PORTB,COUNT2_RESULT ; DISPLAY DIGIT 2
SBI PORTB,7 ; BUZZER OFF
SBI PORTD,5 ; TURN OFF DIGIT 1
CBI PORTD,6 ; TURN ON DIGIT 2
RCALL LONG_DELAY ;
;
OUT SREG, SAVE_STATUS ;
RET
;
;=============================================================================
;=============================================================================
DISPLAY_DIGITS:
;
IN SAVE_STATUS, SREG ;
CPI FLAG_1,$FF ;START BUTTON PRESSSED?
BRNE ALARM_NOT_SET ;
;
INC TIME_OUT ;
CPI TIME_OUT, 61 ;1 SECOND
BREQ TIMER_OUT ;
;
ALARM_NOT_SET:
OUT SREG, SAVE_STATUS ;
RET
TIMER_OUT:
CLR TIME_OUT ;1 SEC UP
INC SECONDS ;
CPI SECONDS,60 ;
BREQ MINUTE_UP ;
OUT SREG, SAVE_STATUS ;
RET
;============================================================================
; BCD ROUTINE HERE
;
MINUTE_UP: ;
CLR SECONDS ;1 MINUTE UP
SUBI COUNT1, 01 ;
BRCS LESS_THEN_1 ;IF 01 > COUNT1, CARRY SET
OUT SREG, SAVE_STATUS ;
RET ;
LESS_THEN_1:
SUBI COUNT1, 06 ;
CPI COUNT2, 00 ;IS COUNT2 ZERO?
BREQ COUNT2_ZERO
SUBI COUNT2, 01 ;
COUNT2_ZERO: ;
OUT SREG, SAVE_STATUS ;
RET ;
;============================================================================
TIME_UP:
CLI ;
CLR COUNTER ;
CLR COUNTER_NEXT ;
CLR COUNTER_NEXT1 ;
CBI PORTD,LED_SET ;LED ON
CBI PORTB,7 ;BUZZER ON
TIME_UP_1:
CLI ;
;
CPI FLASH_FLAG, $FF ;IF DISPLAY OFF
BREQ TIME_UP_2 ;- KEEP IT OFF
; ;ELSE ON!
CBI PORTD, LED_SET ;LED ON.
LDI COUNT1, $3F ;FLASH DISPLAY
COM COUNT1 ;SEGMENT 'G' ON.
OUT PORTB, COUNT1 ;
;
TIME_UP_2:
CBI PORTB, 7 ;BUZZER ON
RCALL LONG_DELAY_1 ;
RCALL LONG_DELAY_1 ;
RCALL LONG_DELAY_1 ;
RCALL LONG_DELAY_1 ;
RCALL LONG_DELAY ;
;
INC COUNTER ;
CPI COUNTER, $FF ;
BREQ NEXT_COUNTER ;
RJMP TIME_UP_1 ;
NEXT_COUNTER:
CLR FLASH_FLAG ;
CLR COUNTER ;
INC COUNTER_NEXT ;
CPI COUNTER_NEXT, $02 ;
BRNE TIME_UP_1 ;
;
NEXT_COUNTER1:
SER FLASH_FLAG ;
CLR COUNTER_NEXT ;
SBI PORTD,ALARM_SET ;LED OFF
SER COUNT1 ;DISPLAY OFF
OUT PORTB, COUNT1 ;
;
SBI PORTB, 7 ;BUZZER OFF
INC COUNTER_NEXT1 ;
CPI COUNTER_NEXT1, $10 ;
BRNE TIME_UP_1 ;
;
;
SBI PORTD,ALARM_SET ;LED OFF
SER COUNT1 ;DISPLAY OFF
OUT PORTB, COUNT1 ;
SBI PORTB,7 ;TURN OFF BUZZER
;
;
SLEEP ;
STOPP:
RJMP STOPP ;
;============================================================================
DELAY:
LDI DURATION,$FF
COUNT_DOWN:
DEC DURATION
CPI DURATION,$00
BRNE COUNT_DOWN
RET
;=============================================================================
LONG_DELAY:
LDI DURATION,$FF
LDI DURATION1,$0A
LOOP_DELAY:
DEC DURATION
CPI DURATION,0
BRNE LOOP_DELAY
;
DEC DURATION1
CPI DURATION1,0
BRNE LOOP_DELAY
RET
;=============================================================================
;
LONG_DELAY_1:
LDI DURATION,$FF
RCALL COUNT_DOWN
;
RET
;==============================================================================
EEREAD_IT:
IN EERTMP, EEAR ;GET ADDRESS
INC EERTMP ;NEXT ADDRESS
OUT EEAR,EERTMP ;OUTPUT ADDRESS
SBI EECR,EERE ;EEPROM READ STROBE
SBI EECR,EERE ;STROBE AGAIN
IN EE_DRDS,EEDR ;GOT DATA.
RET
; ---------------
thanks lot
|