Перейти к содержанию
    

emanuil

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о emanuil

  • День рождения 27.05.1956

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. Помогите с ADuC 831

    Спосибо за содеѝствие, посмотрю, покурю, вот и даташит на DS1307, извини что он на англиѝскиѝ, но на русскиѝ не нашел. DS1307.pdf
  2. Помогите с ADuC 831

    I2C подключаю на pin 26 - SCLOCK и pin 27 - SDATA/MOSI с резисторами по 1к к питанию. переривание от I2C/SPI делается програмно ( может бит там моя ошибка ) вот и переделал прогу, только запись и чтение, сеѝчас легче будет с неѝ разобратся, но не хочет записать ничего в RTC, когда читаю дает только 00 вот и прога : ........................................................ ; RTC DS1307 MCU ADuC831 ; I2C comunications ; ;-------------------------------------------- $MOD831 ;use ADuC831 predefined symbols ;-------------------------------------------- ; ; definitions CR EQU 0DH LF EQU 0AH DS1307W EQU 0D0H DS1307R EQU 0D1H FLAGS DATA 20H LASTREAD BIT FLAGS.0 _12_24 BIT FLAGS.1 PM_AM BIT FLAGS.2 OSC BIT FLAGS.3 BYTECOUNT DATA 22H ; ;____________________________________________________________________ ; DEFINE VARIABLES IN INTERNAL RAM BITCNT DATA 30h ; bit counter for I2C routines / 110000 / SLAVEADD DATA 31h ; slave address for I2C routines / 110001 / INPUT DATA 32h ; data recieved from the slave / 110010 / OUTPUT DATA 33h ; data to be transmitted to slave / 110011 / NOACK BIT 00h ; I2C no acknowledge flag ERR BIT 00h ; I2C error flag ; ;____________________________________________________________________ ; BEGINNING OF CODE CSEG ORG 0000h AJMP START ; ;____________________________________________________________________ ; INT0 ISR ORG 0003h INC OUTPUT RETI ; CSEG AT 30H ;************************************************************* ;*** RESET GOES HERE TO START PROGRAM **** ;************************************************************* ORG 0060h START: ; configure the UART ADuC831 MOV SCON,#52h ; configure UERT for 9600 baud MOV TMOD,#20h ; assumihg 11.0592 MHz crystal MOV TH1,#-3 ; SETB TR1 ; configure & enable interrupts SETB EX0 ; enable INT0 SETB IT0 ; INT0 edge triggered SETB EA ; allow all the interrupts ; initialise settings MOV SLAVEADD,#88H ; clear RW bit / 10001000 / MOV I2CCON,#0A8h ; sets SDATA & SCLOCK, and / 10101000 / ; selects master mode MOV OUTPUT,#0 ; TX 0 as default CLR NOACK CLR ERR ;----------------------------------------------------------------------- ; THIS IS THE MASTER CONTROLLER LOOP ;----------------------------------------------------------------------- MASTER_CONTROLLER: MOV BYTECOUNT,#10H FORM_FEED: MOV A,#LF ; CLEAR SCREEN FOR MAIN MENU LCALL WRITE_DATA DJNZ BYTECOUNT,FORM_FEED MOV DPTR, #TEXT0 ; PUT MAIN MENU ON SCREEN LCALL WRITE_TEXT MOV DPTR,#TEXT3 LCALL WRITE_TEXT LCALL READ_DATA CLR ACC.5 ; CONVERT ACC TO UPPER CASE CJNE A,#'A',NOTA LCALL SET_CLOCKM ; CALL SET CLOCK FUNCTION JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTA: CJNE A,#'B',NOTB LCALL READ_CLOCK ; CALL READ CLOCK FUNCTION JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTB: JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU ;----------------------------------------------------------------------- ; THIS SUB SENDS THE START CONDITION ;----------------------------------------------------------------------- SEND_START: ; Sends the start bit to initiate an I2C ; communication SETB MDE ; enable SDATA pin as an output CLR NOACK CLR MDO ; low O/P on SDATA CLR MCO ; start bit RET ; ;----------------------------------------------------------------------- ; THIS SUB SENDS THE STOP CONDITION ;----------------------------------------------------------------------- SEND_STOP: ; Sends the stop bit to end an I2C ; transmission SETB MDE ; to enable SDATA pin as an output CLR MDO ; get SDATA ready for stop SETB MCO ; set clock for stop SETB MDO ; this is the stop bit RET ; ;----------------------------------------------------------------------- ; THIS SUB SENDS ONE BYTE OF DATA TO THE DS1307 ;----------------------------------------------------------------------- SEND_BYTE: ; Send 8-bits in ACC to the slave MOV BITCNT,#8 ; 8 bits in a byte SETB MDE ; to enable SDATA pin as an output CLR MCO ; make sure that the clock line is low SENDBIT: RLC A ; put data bit to be sent into carry MOV MDO,C ; put data bit on SDATA line SETB MCO ; clock to send bit CLR MCO ; clear clock DJNZ BITCNT,SENDBIT ; jump back and send all eight bits CLR MDE ; release data line for acknowledge SETB MCO ; send clock for acknowledge JNB MDI,NEXT ; this is a check for acknowledge SETB NOACK ; no acknowledge, set flag NEXT: CLR MCO ; clear clock RET ; ;----------------------------------------------------------------------- ; THIS SUB READS ONE BYTE OF DATA FROM THE DS1307 ;----------------------------------------------------------------------- READ_BYTE: ; receives one byte of data from an I2C ; slave device. Returns it in A MOV BITCNT,#8 ; Set bit count. CLR MDE ; to enable SDATA pin as an input CLR MCO ; make sure the clock line is low RCVBIT: SETB MCO ; clock to recieve bit CLR MCO ; clear clock MOV C,MDI ; read data bit into carry. RLC A ; Rotate bit into result byte. DJNZ BITCNT,RCVBIT ; Repeat until all bits received. ; recieved byte is in the accumulator SETB MDE ; Data pin =Output for NACK SETB MDO ; Send NACK (always send NACK for ; last byte in transmission) SETB MCO ; Send NACK clock. CLR MCO RET ; ;----------------------------------------------------------------------- ; ; THIS SUB DELAY THE BUS ;----------------------------------------------------------------------- ; DELAY ; DELAY ROUTINE FOR THE ADuC831 DELAY: ; Delays by 100ms * A ; ADuC831 100ms based on 11.0592MHz Core Clock MOV R2,A ; Acc holds delay variable DLY0: MOV R3,#200 ; Set up delay loop0 DLY1: MOV R4,#229 ; Set up delay loop1 DJNZ R4,$ ; Dec R4 & Jump here until R4 is 0 ; wait here for 131*15.3us=2ms DJNZ R3,DLY1 ; Dec R3 & Jump DLY1 until R3 is 0 ; Wait for 50*2ms DJNZ R2,DLY0 ; Dec R2 & Jump DLY0 until R2 is 0 ; wait for ACC*100ms RET ; Return from subroutine ; ;----------------------------------------------------------------------- ; THIS SUB DELAYS 4 CYCLES ;----------------------------------------------------------------------- DELAY_4: NOP ; DELAY FOR BUS TIMING NOP NOP NOP RET ;----------------------------------------------------------------------- ; THIS SUB SETS THE CLOCK (MANUAL) ;----------------------------------------------------------------------- SET_CLOCKM: MOV R1,#2EH ; SET R1 TO SCRATCHPAD MEMORY FOR DATE/TIME MOV DPTR, #GODINA ; GET THE DATE/TIME INFORMATION FROM THE LCALL WRITE_TEXT ; USER. WRITE THE DATE/TIME TO SCRATCHPAD LCALL READ_BCD ; MEMORY MOV @R1,A DEC R1 MOV DPTR, #MESEC LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #DATATA LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #DEN LCALL WRITE_TEXT LCALL READ_BCD ANL A, #7 MOV @R1,A DEC R1 MOV DPTR, #CHAS LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #MINUTI LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #SEKUNDI LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A MOV R1,#28H ; POINT TO BEGINNING OF CLOCK DATA IN ; SCRATCHPAD MEMORY LCALL SEND_START ; SEND 2WIRE START CONDITION MOV A,#DS1307W ; SEND DS1307 WRITE COMMAND LCALL SEND_BYTE MOV A,#00H ; SET DATA POINTER TO REGISTER 00H ON LCALL SEND_BYTE ; THE DS1307 SEND_LOOP: MOV A,@R1 ; MOVE THE FIRST BYTE OF DATA TO ACC LCALL SEND_BYTE ; SEND DATA ON 2WIRE BUT INC R1 CJNE R1,#2FH,SEND_LOOP ; LOOP UNTIL CLOCK DATA SENT TO DS1307 LCALL SEND_STOP ; SEND 2WIRE STOP CONDITION RET ;----------------------------------------------------------------------- ; THIS SUB READS THE CLOCK AND WRITES IT TO THE SCRATCH PAD MEMORY ;----------------------------------------------------------------------- READ_CLOCK: MOV DPTR,#TEXT4 ; KEY PRESS MSG LCALL WRITE_TEXT READ_AGAIN: MOV R1,#28H ; START OF CLOCK REG IN SCRATCHPAD MOV BYTECOUNT,#00H ; COUNTER UP TO 8 BYTES FOR CLOCK CLR LASTREAD ; FLAG TO CHECK FOR LAST READ ; LCALL SEND_START ; SEND START CONDITION ; MOV A,#DS1307W ; SET POINTER TO REG 00H ON DS1307 ; LCALL SEND_BYTE ; MOV A,#00H ; LCALL SEND_BYTE ; LCALL SEND_STOP ; SEND STOP CONDITION LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307R ; SEND READ COMMAND TO DS1307 LCALL SEND_BYTE READ_LOOP: MOV A,BYTECOUNT ; CHECK TO SEE OF DOING LAST READ CJNE A,#07H,NOT_LAST SETB LASTREAD ; SET LASTREAD FLAG NOT_LAST: LCALL READ_BYTE ; READ A BYTE OF DATA MOV @R1,A ; MOVE DATA IN SCRATCHPAD MEMORY MOV A,BYTECOUNT ; CHECK TO SEE IF READING SECONDS REG CJNE A,#00H,NOT_FIRST CLR OSC ; CLR OSC FLAG MOV A,@R1 ; MOVE SECONDS REG INTO ACC JNB ACC.7,NO_OSC ; JUMP IF BIT 7 OF IS A 0 SETB OSC ; SET OSC FLAG, BIT 7 IS A 1 CLR ACC.7 ; CLEAR BIT 7 FOR DISPLAY ; PURPOSES MOV @R1,A ; MOVE DATA BACK TO SCRATCHPAD NO_OSC: NOT_FIRST: INC R1 ; INC COUNTERS INC BYTECOUNT MOV A,BYTECOUNT CJNE A,#08H,READ_LOOP ; LOOP FOR ENTIRE CLOCK REGISTERS LCALL SEND_STOP ; SEND 2WIRE STOP CONDITION LCALL DISP_CLOCK ; DISPLAY DATE/TIME FROM SCRATCHPAD JNB RI,READ_AGAIN ; READ AND DISPLAY UNTIL A KEY IS PRESSED CLR RI RET ;----------------------------------------------------------------------- ; THIS SUB DISPLAYS THE DATE AND TIME SAVED IN SCRATCHPAD MEMORY ;----------------------------------------------------------------------- DISP_CLOCK: MOV DPTR,#TEXT1 ; DATE: LCALL WRITE_TEXT MOV R1,#2DH ; MONTH MOV A,@R1 LCALL WRITE_BCD MOV A,#'/' LCALL WRITE_DATA MOV R1,#2CH ; DATE MOV A,@R1 LCALL WRITE_BCD MOV A,#'/' LCALL WRITE_DATA MOV R1,#2EH ; YEAR MOV A,@R1 LCALL WRITE_BCD MOV A,#09H ; TAB LCALL WRITE_DATA MOV DPTR,#TEXT2 ; TIME: LCALL WRITE_TEXT MOV R1,#2AH ; HOURS MOV A,@R1 LCALL WRITE_BCD MOV A,#3AH ; COLON LCALL WRITE_DATA MOV R1,#29H ; MINUTES MOV A,@R1 LCALL WRITE_BCD MOV A,#3AH ; COLON LCALL WRITE_DATA MOV R1,#28H ; SECONDS MOV A,@R1 LCALL WRITE_BCD RET ;----------------------------------------------------------------------- ; THIS SUB READS DATA FROM THE SCREEN AND CONVERTS IT TO BCD FORM ; DATA SHOULD BE HEX DIGITS: 1,2,3...9,A,B,C,D,E,F ;----------------------------------------------------------------------- READ_BCD: MOV R0,#0 ; CLEAR R0 BCD_LOOP: LCALL READ_DATA ; READ BYTE FROM KEYBOARD CJNE A, #0DH, BCD ; CHECK FOR CR MOV A,R0 ; MOVE R0 TO ACC AND RETURN RET BCD: ADD A,#-30H ; BEGIN TO CONVERT TO ACTUAL VALUE JNB ACC.4,DIGIT ; JUMP IF NOT A-F ADD A,#-07H ; IF A-F SUBTRACT 7 DIGIT: ANL A,#0FH ; ENSURE BITS 4-7 ARE CLEARED ANL 0,#0FH ; ENSURE BITS 4-7 ARE CLEARED XCH A,R0 ; EXCHANGE R0 AND ACC SWAP A ; NIBBLE SWAP ACC ORL A,R0 ; INSERT BITS 0-3 OF R0 INTO ACC MOV R0,A ; MOVE ACC INTO R0 SJMP BCD_LOOP ; LOOP UNTIL CR ENCOUNTERED ;----------------------------------------------------------------------- ; THIS SUB WRITES THE BYTE TO THE SCREEN ;----------------------------------------------------------------------- WRITE_BCD: PUSH ACC ; SAVE ACC ON STACK SWAP A ; NIBBLE SWAP ACC ANL A,#0FH ; CLEAR BITS 4-7 OF ACC ADD A,#07H ; ADD 7 TO ACC TO CONVERT TO ASCII HEX JNB ACC.4,LESSNINE ; CHECK TO SEE IF LESS THAN NINE 0-8 CJNE A,#10H,NOTNINE ; JUMP IS GREATER THAN NINE A-F LESSNINE: ADD A,#-07H ; SUBTRACT 7 FOR 0-9 NOTNINE: ADD A,#30H ; ADD 30 TO CONVERT TO ASCII EQUIVALENT LCALL WRITE_DATA ; WRITE BYTE TO SCREEN POP ACC ; RECALL ACC FROM STACK ANL A,#0FH ; PERFORM CONVERSION ON OTHER HALF OF BYTE ADD A,#07H JNB ACC.4,NINE2 CJNE A,#10H,NOTNINE2 NINE2: ADD A,#-07H NOTNINE2: ADD A,#30H LCALL WRITE_DATA RET ;----------------------------------------------------------------------- READ_DATA: JNB RI,READ_DATA ; LOOP WHILE RI BIT IS LOW CLR RI ; MOV A,SBUF ; GET DATA BYTE FROM SERIAL BUFFER RET ;----------------------------------------------------------------------- WRITE_DATA: JNB TI,WRITE_DATA ; LOOP WHILE TI BIT IS LOW CLR TI ; MOV SBUF,A ; SEND DATA BYTE TO SERIAL BUFFER RET ;----------------------------------------------------------------------- WRITE_TEXT: PUSH ACC ; SAVE ACC BYTE ON STACK WT1: CLR A ; CLEAR ACC MOVC A,@A+DPTR ; MOVE FIRST BYTE OF STRING ; TO ACC INC DPTR ; INC DATA POINTER CJNE A,#0,WT2 ; CHECK FOR STRING ; TERMINATOR - 0 POP ACC ; RESTORE ACC RET ; RETURN WHEN STRING IS SENT WT2: LCALL WRITE_DATA ; SEND BYTE OF STRING OVER SERIAL PORT SJMP WT1 ;----------------------------------------------------------------------- ; TEXT STRINGS USED FOR USER INTERFACE OVER SERIAL PORT ;----------------------------------------------------------------------- GODINA: DB CR,LF,'GODINA (0 - 99) : ',0 MESEC: DB CR,LF,'MESEC (1 - 12) : ',0 DATATA: DB CR,LF,'DATA OT MESECA : ',0 DEN: DB CR,LF,'DEN OT SEDMICATA : ',0 CHAS: DB CR,LF,'CHAS (0 - 24) : ',0 MINUTI: DB CR,LF,'MINUTI (0 - 59) : ',0 SEKUNDI: DB CR,LF,'SEKUNDI (0 - 59) : ',0 TRIER: DB CR,LF,'NATISNI NIAKOI BUTON ZA DA ZAPISHESH TEZI DANNI ',CR,LF,0 TEXT0: DB CR,LF,'***************** ' DB CR,LF,'******** DS1307 TEST PROGRAMM ********* ',CR,LF DB CR,LF,'*MOLIA IZBERETE OPCIA ZA DA PRODALZITE* ' DB CR,LF,'--------------------------------------- ' DB CR,LF,'A. SET TIME(MANUAL) B. READ DATE/TIME ' DB CR,LF,'ESC. TO QUIT ',0 TEXT1: DB CR,'DATE: ',0 TEXT2: DB 'TIME: ',0 TEXT3: DB CR,LF,0 TEXT4: DB CR,LF,'natisni niakoi klavish za vrashtane' DB CR,LF,0 ;****************************************** ;**** END OF PROGRAM ************ ;****************************************** END
  3. Помогите с ADuC 831

    Ползую ASPIRE - Version 1.5 IDE software ( write, edit, debug, compile ) и работаю в среду MetaLink 8051 Cross-Assembler
  4. Помогите с ADuC 831

    Спосибо за информацию Verifi, Вот и моя проблемма - нужно подключить RTC ( DS1307 ) к ADuC831, вводит дату и время и потом читать дату и время. Проработал прогу, но не хочет записибать в 1307, вот прикреплю и асемблерскии фаѝлчик, посмотрите пожалуѝста и сказите где моя ошибка. ..................................... ; Program DS1307.ASM ; ; This program responds to commands received over the serial ; port to set the date/time as well as RAM data on the DS1307 ; using a ADuC831 as a controller ; $MOD831 ;use ADuC831 predefined symbols ; ; definitions CR EQU 0DH LF EQU 0AH MCON EQU 0C6H TA EQU 0C7H SCL BIT P0.4 SDA BIT P0.3 TRIG BIT P0.2 DS1307W EQU 0D0H DS1307R EQU 0D1H FLAGS DATA 20H LASTREAD BIT FLAGS.0 _12_24 BIT FLAGS.1 PM_AM BIT FLAGS.2 OSC BIT FLAGS.3 SQW BIT FLAGS.4 ACK BIT FLAGS.5 BUS_FAULT BIT FLAGS.6 _2W_BUSY BIT FLAGS.7 BITCOUNT DATA 21H BYTECOUNT DATA 22H BYTE DATA 23H ;____________________________________________________________________ ; DEFINE VARIABLES IN INTERNAL RAM BITCNT DATA 30h ; bit counter for I2C routines SLAVEADD DATA 31h ; slave address for I2C routines INPUT DATA 32h ; data recieved from the slave OUTPUT DATA 33h ; data to be transmitted to slave NOACK BIT 00h ; I2C no acknowledge flag ERR BIT 00h ; I2C error flag ; ;____________________________________________________________________ ; BEGINNING OF CODE CSEG ORG 0000h AJMP START ; ;____________________________________________________________________ ; INT0 ISR ORG 0003h INC OUTPUT RETI ; CSEG AT 30H ;************************************************************* ;*** RESET GOES HERE TO START PROGRAM **** ;************************************************************* ORG 0060h START: ; configure the UART ADuC831 MOV SCON,#52h ; configure UERT for 9600 baud MOV TMOD,#20h ; assumihg 11.0592 MHz crystal MOv TH1,#-3 SETB TR1 ; configure & enable interrupts SETB EX0 ; enable INT0 SETB IT0 ; INT0 edge triggered SETB EA ; allow all the interrupts ; initialise settings MOV SLAVEADD,#88H ; clear RW bit MOV I2CCON,#0A8h ; sets SDATA & SCLOCK, and ; selects master mode MOV OUTPUT,#0 ; TX 0 as default CLR NOACK CLR ERR ;----------------------------------------------------------------------- ; THIS IS THE MASTER CONTROLLER LOOP ;----------------------------------------------------------------------- MASTER_CONTROLLER: MOV BYTECOUNT,#10H FORM_FEED: MOV A,#LF ; CLEAR SCREEN FOR MAIN MENU LCALL WRITE_DATA DJNZ BYTECOUNT,FORM_FEED MOV DPTR, #TEXT0 ; PUT MAIN MENU ON SCREEN LCALL WRITE_TEXT MOV DPTR, #TEXT3 LCALL WRITE_TEXT LCALL READ_DATA CLR ACC.5 ; CONVERT ACC TO UPPER CASE CJNE A,#'A',NOTA ; CALL SET CLOCK FUNCTION LCALL SET_CLOCKM JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTA: CJNE A,#'B',NOTB ; CALL SET RAM FUNCTION AND LCALL SET_RAM ; CALL READ RAM FUNCTION LCALL READ_RAM JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTB: CJNE A,#'C',NOTC ; CALL READ CLOCK FUNCTION LCALL READ_CLOCK JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTC: CJNE A,#'D',NOTD ; CALL READ RAM FUNCTION LCALL READ_RAM JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTD: CJNE A,#'E',NOTE ; CALL OSC CONTROL FUNCTION CLR OSC ; CLR OSC FLAG - ON LCALL OSC_CONTROL JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTE: CJNE A,#'F',NOTF ; CALL OSC CONTROL FUNCTION SETB OSC ; SET OSC FLAG - OFF LCALL OSC_CONTROL JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTF: CJNE A,#'G',NOTG ; CALL SWQ CONTROL FUNCTION CLR SQW ; CLR SQW FLAG - ON LCALL SQW_CONTROL_1HZ JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTG: CJNE A,#'H',NOTH ; CALL SWQ CONTROL FUNCTION CLR SQW ; CLR SQW FLAG - ON LCALL SQW_CONTROL_4KHZ JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTH: CJNE A,#'I',NOTI ; CALL SWQ CONTROL FUNCTION CLR SQW ; CLR SQW FLAG - ON LCALL SQW_CONTROL_8KHZ JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTI: CJNE A,#'J',NOTJ ; CALL SWQ CONTROL FUNCTION CLR SQW ; CLR SQW FLAG - ON LCALL SQW_CONTROL_32KHZ JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU NOTJ: CJNE A,#'K',NOTK ; CALL SWQ CONTROL FUNCTION SETB SQW ; SET SQW FLAG - OFF LCALL SQW_CONTROL_1HZ JMP MASTER_CONTROLLER NOTK: CJNE A,#'L',NOTL LCALL SET_RAM_UNQ LCALL READ_RAM NOTL: JMP MASTER_CONTROLLER ; RETURN TO MAIN MENU ;----------------------------------------------------------------------- ; THIS SUB SENDS THE START CONDITION ;----------------------------------------------------------------------- SEND_START: ; Sends the start bit to initiate an I2C communication SETB MDE ; enable SDATA pin as an output CLR NOACK CLR MDO ; low O/P on SDATA CLR MCO ; start bit RET ; ;----------------------------------------------------------------------- ; THIS SUB SENDS THE STOP CONDITION ;----------------------------------------------------------------------- SEND_STOP: ; Sends the stop bit to end an I2C transmission SETB MDE ; to enable SDATA pin as an output CLR MDO ; get SDATA ready for stop SETB MCO ; set clock for stop SETB MDO ; this is the stop bit RET ; ;----------------------------------------------------------------------- ; THIS SUB SENDS ONE BYTE OF DATA TO THE DS1307 ;----------------------------------------------------------------------- SEND_BYTE: ; Send 8-bits in ACC to the slave MOV BITCNT,#8 ; 8 bits in a byte SETB MDE ; to enable SDATA pin as an output CLR MCO ; make sure that the clock line is low SENDBIT: RLC A ; put data bit to be sent into carry MOV MDO,C ; put data bit on SDATA line SETB MCO ; clock to send bit CLR MCO ; clear clock DJNZ BITCNT,SENDBIT ; jump back and send all eight bits CLR MDE ; release data line for acknowledge SETB MCO ; send clock for acknowledge JNB MDI,NEXT ; this is a check for acknowledge SETB NOACK ; no acknowledge, set flag NEXT: CLR MCO ; clear clock RET ; ;----------------------------------------------------------------------- ; THIS SUB READS ONE BYTE OF DATA FROM THE DS1307 ;----------------------------------------------------------------------- READ_BYTE: ; receives one byte of data from an I2C slave device. Returns it in A MOV BITCNT,#8 ; Set bit count. CLR MDE ; to enable SDATA pin as an input CLR MCO ; make sure the clock line is low RCVBIT: SETB MCO ; clock to recieve bit CLR MCO ; clear clock MOV C,MDI ; read data bit into carry. RLC A ; Rotate bit into result byte. DJNZ BITCNT,RCVBIT ; Repeat until all bits received. ; recieved byte is in the accumulator SETB MDE ; Data pin =Output for NACK SETB MDO ; Send NACK (always send NACK for ; last byte in transmission) SETB MCO ; Send NACK clock. CLR MCO RET ; ;----------------------------------------------------------------------- ; ; THIS SUB SETS THE CLOCK LINE HIGH ;----------------------------------------------------------------------- SCL_HIGH: SETB SCL ; SET SCL HIGH JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL RET ;----------------------------------------------------------------------- ; ; THIS SUB DELAY THE BUS ;----------------------------------------------------------------------- ; DELAY ; DELAY ROUTINE FOR THE ADuC812/ADuC816/ADuC824 DELAY: ; Delays by 100ms * A ; ADuC812 100ms based on 11.0592MHz Core Clock ; ADuC824 100ms based on 1.573MHz Core Clock MOV R2,A ; Acc holds delay variable DLY0: MOV R3,#200 ; Set up delay loop0 DLY1: MOV R4,#229 ; Set up delay loop1 DJNZ R4,$ ; Dec R4 & Jump here until R4 is 0 ; wait here for 131*15.3us=2ms DJNZ R3,DLY1 ; Dec R3 & Jump DLY1 until R3 is 0 ; Wait for 50*2ms DJNZ R2,DLY0 ; Dec R2 & Jump DLY0 until R2 is 0 ; wait for ACC*100ms RET ; Return from subroutine ; ;----------------------------------------------------------------------- ; THIS SUB DELAYS 4 CYCLES ;----------------------------------------------------------------------- DELAY_4: NOP ; DELAY FOR BUS TIMING NOP NOP NOP RET ;----------------------------------------------------------------------- ; THIS SUB SETS THE CLOCK (MANUAL) ;----------------------------------------------------------------------- SET_CLOCKM: MOV R1,#2EH ; SET R1 TO SCRATCHPAD MEMORY FOR DATE/TIME MOV DPTR, #GODINA ; GET THE DATE/TIME INFORMATION FROM THE LCALL WRITE_TEXT ; USER. WRITE THE DATE/TIME TO SCRATCHPAD LCALL READ_BCD ; MEMORY MOV @R1,A DEC R1 MOV DPTR, #MESEC LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #DATATA LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #DEN LCALL WRITE_TEXT LCALL READ_BCD ANL A, #7 MOV @R1,A DEC R1 MOV DPTR, #CHAS LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #MINUTI LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A DEC R1 MOV DPTR, #SEKUNDI LCALL WRITE_TEXT LCALL READ_BCD MOV @R1,A MOV R1,#28H ; POINT TO BEGINNING OF CLOCK DATA IN SCRATCHPAD MEMORY LCALL SEND_START ; SEND 2WIRE START CONDITION MOV A,#DS1307W ; SEND DS1307 WRITE COMMAND LCALL SEND_BYTE MOV A,#00H ; SET DATA POINTER TO REGISTER 00H ON LCALL SEND_BYTE ; THE DS1307 SEND_LOOP: MOV A,@R1 ; MOVE THE FIRST BYTE OF DATA TO ACC LCALL SEND_BYTE ; SEND DATA ON 2WIRE BUT INC R1 CJNE R1,#2FH,SEND_LOOP ; LOOP UNTIL CLOCK DATA SENT TO DS1307 LCALL SEND_STOP ; SEND 2WIRE STOP CONDITION RET ;----------------------------------------------------------------------- ; THIS SUB SETS THE DS1307 USER RAM TO THE VALUE IN 'BYTE' ;----------------------------------------------------------------------- SET_RAM: MOV R1,#08H ; POINTER TO BEGINNING OF DS1307 USER RAM MOV DPTR, #TEXT5 ; MESSAGE TO ENTER DATA BYTE LCALL WRITE_TEXT ; LCALL READ_BCD ; READ BYTE FROM KEYBOARD MOV BYTE,A ; AND STORE IN 'BYTE' LCALL SEND_START ; SEND 2WIRE START CONDITION MOV A,#DS1307W ; LOAD DS1307 WRITE COMMAND LCALL SEND_BYTE ; SEND WRITE COMMAND MOV A,#08H ; SET DS1307 DATA POINTER TO BEGINNING LCALL SEND_BYTE ; OF USER RAM - 08H SEND_LOOP2: MOV A,BYTE ; WRITE BYTE TO ENTIRE RAM SPACE LCALL SEND_BYTE ; WHICH IS 08H TO 37H INC R1 CJNE R1,#040H,SEND_LOOP2 ; LOOP UNTIL RAM FILLED LCALL SEND_STOP ; SEND 2WIRE STOP CONTION RET ;----------------------------------------------------------------------- ; THIS SUB SETS THE DS1307 USER RAM TO THE UNIQUE PATTERN ;----------------------------------------------------------------------- SET_RAM_UNQ: MOV R1,#08H ; POINTER TO BEGINNING OF DS1307 USER RAM LCALL SEND_START ; SEND 2WIRE START CONDITION MOV A,#DS1307W ; LOAD DS1307 WRITE COMMAND LCALL SEND_BYTE ; SEND WRITE COMMAND MOV A,#08H ; SET DS1307 DATA POINTER TO BEGINNING LCALL SEND_BYTE ; OF USER RAM - 08H SEND_LOOP3: LCALL SEND_BYTE ; WHICH IS 08H TO 37H INC R1 INC A CJNE R1,#040H,SEND_LOOP3 ; LOOP UNTIL RAM FILLED LCALL SEND_STOP ; SEND 2WIRE STOP CONTION RET ;----------------------------------------------------------------------- ; THIS SUB READS THE DS1307 RAM AND WRITES IT TO THE SCRATCH PAD MEMORY ;----------------------------------------------------------------------- READ_RAM: MOV DPTR,#TEXT4 ; SEND KEY PRESS MSG LCALL WRITE_TEXT MOV R1,#30H ; START OF RAM REGS IN SCRATCH PAD MOV BYTECOUNT,#00H ; COUNTER FOR 56 RAM BYTES CLR LASTREAD ; FLAG TO CHECK FOR LAST READ LCALL SEND_START ; SEND 2WIRE START CONDITION MOV A,#DS1307W ; SEND DS1307 WRITE COMMAND LCALL SEND_BYTE MOV A,#08H ; SET POINTER TO REG 08H ON ;DS1307 LCALL SEND_BYTE LCALL SEND_STOP ; SEND STOP CONDITION LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307R ; SEND DS1307 READ COMMAND LCALL SEND_BYTE READ_LOOP2: MOV A,BYTECOUNT ; CHECK TO SEE OF DOING LAST READ CJNE A,#37H,NOT_LAST2 SETB LASTREAD ; IF LAST READ SET LASTREAD FLAG NOT_LAST2: LCALL READ_BYTE ; READ A BYTE OF DATA MOV @R1,A ; MOVE DATA INTO SCRATCHPAD MEMORY INC R1 ; INC POINTERS INC BYTECOUNT MOV A,BYTECOUNT CJNE A,#38H,READ_LOOP2 ; LOOP FOR ENTIRE DS1307 RAM LCALL SEND_STOP ; SEND 2WIRE STOP CONDITION LCALL DISP_RAM ; DISPLAY DATA IN SCRATCHPAD MEMORY JNB RI,$ ;WAIT UNTIL A KEY IS PRESSED CLR RI RET ;----------------------------------------------------------------------- ; THIS SUB DISPLAYS THE RAM DATA SAVED IN SCRATCHPAD MEMORY ;----------------------------------------------------------------------- DISP_RAM: MOV R1,#30H ;START OF RAM IN SCRATCHPAD ;MEMORY MOV BITCOUNT,#00H MOV DPTR,#TEXT6 ;DISPLAY TABLE HEADING LCALL WRITE_TEXT DISP_ADDR: LCALL DISP_LOC ; DISPLAY VALUE OF CURRENT RAM LOCATION DIS_LOOP: MOV A,@R1 ; DISPLAY RAM DATA SAVED IN SCRATCHPAD LCALL WRITE_BCD ; CONVERT TO BCD FORMAT AND DISPLAY INC R1 INC BITCOUNT MOV A,#20H ; SPACE BETWEEN DATA BYTES LCALL WRITE_DATA MOV A,BITCOUNT CJNE A,#08H,DIS_LOOP ; LINE FEED AFTER 8 BYTES OF DATA MOV BITCOUNT,#00H MOV DPTR,#TEXT3 ; 'CR,LF' LCALL WRITE_TEXT CJNE R1,#68H,DISP_ADDR ; DISPLAY DATA FOR 56 BYTES OF RAM RET ;----------------------------------------------------------------------- ; ; THIS SUB WRITES THE RAM LOCATION OF THE DATA ;----------------------------------------------------------------------- DISP_LOC: MOV A,R1 ; DISPLAY THE HEX VALUE FOR THE DATA ADD A,#-28H ; IN THE DS1307 RAM SPACE LCALL WRITE_BCD ; CONVERTS SCRATCHPAD ADDRESS MOV A,#20H ; INTO DS1307 RAM ADDRESS LCALL WRITE_DATA MOV A,#20H LCALL WRITE_DATA MOV A,#20H LCALL WRITE_DATA RET ;----------------------------------------------------------------------- ; THIS SUB READS THE CLOCK AND WRITES IT TO THE SCRATCH PAD MEMORY ; ;----------------------------------------------------------------------- READ_CLOCK: MOV DPTR,#TEXT4 ; KEY PRESS MSG LCALL WRITE_TEXT READ_AGAIN: MOV R1,#28H ; START OF CLOCK REG IN SCRATCHPAD MOV BYTECOUNT,#00H ; COUNTER UP TO 8 BYTES FOR CLOCK CLR LASTREAD ; FLAG TO CHECK FOR LAST READ LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307W ; SET POINTER TO REG 00H ON DS1307 LCALL SEND_BYTE MOV A,#00H LCALL SEND_BYTE LCALL SEND_STOP ; SEND STOP CONDITION LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307R ; SEND READ COMMAND TO DS1307 LCALL SEND_BYTE READ_LOOP: MOV A,BYTECOUNT ; CHECK TO SEE OF DOING LAST READ CJNE A,#07H,NOT_LAST SETB LASTREAD ; SET LASTREAD FLAG NOT_LAST: LCALL READ_BYTE ; READ A BYTE OF DATA MOV @R1,A ; MOVE DATA IN SCRATCHPAD MEMORY MOV A,BYTECOUNT ; CHECK TO SEE IF READING SECONDS REG CJNE A,#00H,NOT_FIRST CLR OSC ; CLR OSC FLAG MOV A,@R1 ; MOVE SECONDS REG INTO ACC JNB ACC.7,NO_OSC ; JUMP IF BIT 7 OF IS A 0 SETB OSC ; SET OSC FLAG, BIT 7 IS A 1 CLR ACC.7 ; CLEAR BIT 7 FOR DISPLAY ; PURPOSES MOV @R1,A ; MOVE DATA BACK TO SCRATCHPAD NO_OSC: NOT_FIRST: INC R1 ; INC COUNTERS INC BYTECOUNT MOV A,BYTECOUNT CJNE A,#08H,READ_LOOP ; LOOP FOR ENTIRE CLOCK REGISTERS LCALL SEND_STOP ; SEND 2WIRE STOP CONDITION LCALL DISP_CLOCK ; DISPLAY DATE/TIME FROM SCRATCHPAD JNB RI,READ_AGAIN ; READ AND DISPLAY UNTIL A KEY IS PRESSED CLR RI RET ;----------------------------------------------------------------------- ; THIS SUB DISPLAYS THE DATE AND TIME SAVED IN SCRATCHPAD MEMORY ;----------------------------------------------------------------------- DISP_CLOCK: MOV DPTR,#TEXT1 ; DATE: LCALL WRITE_TEXT MOV R1,#2DH ; MONTH MOV A,@R1 LCALL WRITE_BCD MOV A,#'/' LCALL WRITE_DATA MOV R1,#2CH ; DATE MOV A,@R1 LCALL WRITE_BCD MOV A,#'/' LCALL WRITE_DATA MOV R1,#2EH ; YEAR MOV A,@R1 LCALL WRITE_BCD MOV A,#09H ; TAB LCALL WRITE_DATA MOV DPTR,#TEXT2 ; TIME: LCALL WRITE_TEXT MOV R1,#2AH ; HOURS MOV A,@R1 LCALL WRITE_BCD MOV A,#3AH ; COLON LCALL WRITE_DATA MOV R1,#29H ; MINUTES MOV A,@R1 LCALL WRITE_BCD MOV A,#3AH ; COLON LCALL WRITE_DATA MOV R1,#28H ; SECONDS MOV A,@R1 LCALL WRITE_BCD RET ;----------------------------------------------------------------------- ; THIS SUB SETS THE OSCILLATOR ACCORDING TO THE OSC BIT ;----------------------------------------------------------------------- OSC_CONTROL: LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307W ; SET POINTER TO REG 00H ON DS1307 LCALL SEND_BYTE MOV A,#00H LCALL SEND_BYTE SETB LASTREAD ; SET LAST READ FOR SINGLE READ LCALL SEND_STOP ; SEND STOP CONDITION LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307R ; SEND READ COMMAND TO DS1307 LCALL SEND_BYTE LCALL READ_BYTE ; READ SECONDS REGISTER CLR ACC.7 ; TURN OSC ON JNB OSC,OSC_SET SETB ACC.7 ; TURN OSC OFF IF OSC BIT IS SET IN OSC_SET: ; SECONDS REGISTER PUSH ACC ; SAVE SECONDS DATA ON STACK LCALL SEND_STOP ; SEND STOP CONDITION LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307W ; SET POINTER TO REG 00H ON DS1307 LCALL SEND_BYTE MOV A,#00H LCALL SEND_BYTE POP ACC ; SEND SECONDS REGISTER TO CONTROL LCALL SEND_BYTE ; OSCILLATOR ON DS1307 LCALL SEND_STOP RET ;----------------------------------------------------------------------- ; THIS SUB CONTROLS THE SQW OUTPUT 1HZ ;----------------------------------------------------------------------- SQW_CONTROL_1HZ: LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307W ; SET POINTER TO REG 07H ON DS1307 LCALL SEND_BYTE MOV A,#07H LCALL SEND_BYTE MOV A,#90H ; SQW/OUT ON AT 1HZ JNB SQW,SQW_SET ; JUMP IF SQW BIT IS ACTIVE MOV A,#80H ; TURN SQW/OUT OFF - OFF HIGH SQW_SET: LCALL SEND_BYTE LCALL SEND_STOP RET ;----------------------------------------------------------------------- ; THIS SUB CONTROLS THE SQW OUTPUT 4KHZ ;----------------------------------------------------------------------- SQW_CONTROL_4KHZ: LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307W ; SET POINTER TO REG 07H ON DS1307 LCALL SEND_BYTE MOV A,#07H LCALL SEND_BYTE MOV A,#91H ; SQW/OUT ON AT 1HZ JNB SQW,SQW_SET1 ; JUMP IF SQW BIT IS ACTIVE MOV A,#80H ; TURN SQW/OUT OFF - OFF HIGH SQW_SET1: LCALL SEND_BYTE LCALL SEND_STOP RET ;----------------------------------------------------------------------- ; THIS SUB CONTROLS THE SQW OUTPUT 8KHZ ;----------------------------------------------------------------------- SQW_CONTROL_8KHZ: LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307W ; SET POINTER TO REG 07H ON DS1307 LCALL SEND_BYTE MOV A,#07H LCALL SEND_BYTE MOV A,#92H ; SQW/OUT ON AT 1HZ JNB SQW,SQW_SET2 ; JUMP IF SQW BIT IS ACTIVE MOV A,#80H ; TURN SQW/OUT OFF - OFF HIGH SQW_SET2: LCALL SEND_BYTE LCALL SEND_STOP RET ;----------------------------------------------------------------------- ; THIS SUB CONTROLS THE SQW OUTPUT 32KHZ ;----------------------------------------------------------------------- SQW_CONTROL_32KHZ: LCALL SEND_START ; SEND START CONDITION MOV A,#DS1307W ; SET POINTER TO REG 07H ON DS1307 LCALL SEND_BYTE MOV A,#07H LCALL SEND_BYTE MOV A,#93H ; SQW/OUT ON AT 1HZ JNB SQW,SQW_SET3 ; JUMP IF SQW BIT IS ACTIVE MOV A,#80H ; TURN SQW/OUT OFF - OFF HIGH SQW_SET3: LCALL SEND_BYTE LCALL SEND_STOP RET ;----------------------------------------------------------------------- ; THIS SUB IS A SCOPE TRIGGER BIT ;----------------------------------------------------------------------- TRIGGER: CLR TRIG SETB TRIG LCALL DELAY_4 CLR TRIG RET ;----------------------------------------------------------------------- ; THIS SUB READS DATA FROM THE SCREEN AND CONVERTS IT TO BCD FORM ; DATA SHOULD BE HEX DIGITS: 1,2,3...9,A,B,C,D,E,F ;----------------------------------------------------------------------- READ_BCD: MOV R0,#0 ; CLEAR R0 BCD_LOOP: LCALL READ_DATA ; READ BYTE FROM KEYBOARD CJNE A, #0DH, BCD ; CHECK FOR CR MOV A,R0 ; MOVE R0 TO ACC AND RETURN RET BCD: ADD A,#-30H ; BEGIN TO CONVERT TO ACTUAL VALUE JNB ACC.4,DIGIT ; JUMP IF NOT A-F ADD A,#-07H ; IF A-F SUBTRACT 7 DIGIT: ANL A,#0FH ; ENSURE BITS 4-7 ARE CLEARED ANL 0,#0FH ; ENSURE BITS 4-7 ARE CLEARED XCH A,R0 ; EXCHANGE R0 AND ACC SWAP A ; NIBBLE SWAP ACC ORL A,R0 ; INSERT BITS 0-3 OF R0 INTO ACC MOV R0,A ; MOVE ACC INTO R0 SJMP BCD_LOOP ; LOOP UNTIL CR ENCOUNTERED ;----------------------------------------------------------------------- ; THIS SUB WRITES THE BYTE TO THE SCREEN ;----------------------------------------------------------------------- WRITE_BCD: PUSH ACC ; SAVE ACC ON STACK SWAP A ; NIBBLE SWAP ACC ANL A,#0FH ; CLEAR BITS 4-7 OF ACC ADD A,#07H ; ADD 7 TO ACC TO CONVERT TO ASCII HEX JNB ACC.4,LESSNINE ; CHECK TO SEE IF LESS THAN NINE 0-8 CJNE A,#10H,NOTNINE ; JUMP IS GREATER THAN NINE A-F LESSNINE: ADD A,#-07H ; SUBTRACT 7 FOR 0-9 NOTNINE: ADD A,#30H ; ADD 30 TO CONVERT TO ASCII EQUIVALENT LCALL WRITE_DATA ; WRITE BYTE TO SCREEN POP ACC ; RECALL ACC FROM STACK ANL A,#0FH ; PERFORM CONVERSION ON OTHER HALF OF BYTE ADD A,#07H JNB ACC.4,NINE2 CJNE A,#10H,NOTNINE2 NINE2: ADD A,#-07H NOTNINE2: ADD A,#30H LCALL WRITE_DATA RET ;----------------------------------------------------------------------- READ_DATA: JNB RI,READ_DATA ; LOOP WHILE RI BIT IS LOW CLR RI ; MOV A,SBUF ; GET DATA BYTE FROM SERIAL BUFFER RET ;----------------------------------------------------------------------- WRITE_DATA: JNB TI,WRITE_DATA ; LOOP WHILE TI BIT IS LOW CLR TI ; MOV SBUF,A ; SEND DATA BYTE TO SERIAL ; BUFFER RET ;----------------------------------------------------------------------- WRITE_TEXT: PUSH ACC ; SAVE ACC BYTE ON STACK WT1: CLR A ; CLEAR ACC MOVC A,@A+DPTR ; MOVE FIRST BYTE OF STRING ; TO ACC INC DPTR ; INC DATA POINTER CJNE A,#0,WT2 ; CHECK FOR STRING ; TERMINATOR - 0 POP ACC ; RESTORE ACC RET ; RETURN WHEN STRING IS SENT WT2: LCALL WRITE_DATA ; SEND BYTE OF STRING OVER SERIAL PORT SJMP WT1 ;----------------------------------------------------------------------- ; TEXT STRINGS USED FOR USER INTERFACE OVER SERIAL PORT ;----------------------------------------------------------------------- GODINA: DB CR,LF,'GODINA (0 - 99) : ',0 MESEC: DB CR,LF,'MESEC (1 - 12) : ',0 DATATA: DB CR,LF,'DATA OT MESECA : ',0 DEN: DB CR,LF,'DEN OT SEDMICATA : ',0 CHAS: DB CR,LF,'CHAS (0 - 24) : ',0 MINUTI: DB CR,LF,'MINUTI (0 - 59) : ',0 SEKUNDI: DB CR,LF,'SEKUNDI (0 - 59) : ',0 TRIER: DB CR,LF,'PRESS ANY KEY TO SET THIS TIME ',CR,LF,0 TEXT0: DB CR,LF,'******* DALLAS SEMICONDUCTOR ******** ' DB CR,LF,'******* DS1307 TEST PROGRAM ******** ',CR,LF DB CR,LF,'*PLEASE CHOOSE AN OPTION TO CONTINUE* ' DB CR,LF,'------------------------------------- ' DB CR,LF,'A. SET TIME(MANUAL) B. SET RAM ' DB CR,LF,'C. READ DATE/TIME D. READ RAM ' DB CR,LF,'E. OSC ON F. OSC OFF ' DB CR,LF DB CR,LF,'G. SQW/OUT ON-1HZ H. SQW/OUT ON-4KHZ' DB CR,LF,'I. SQW/OUT ON-8KHZ J. SQW/OUT ON-32KHZ' DB CR,LF DB CR,LF,'K. SQW/OUT OFF' DB CR,LF,'L. WRITE RAM UNIQUE PATTERN ' DB CR,LF,'ESC. TO QUIT ',0 TEXT1: DB CR,'DATE: ',0 TEXT2: DB 'TIME: ',0 TEXT3: DB CR,LF,0 TEXT4: DB CR,LF,'PRESS ANY KEY TO RETURN' DB CR,LF,0 TEXT5: DB CR,LF,'ENTER THE BYTE VALUE WHICH WILL FILL THE RAM' DB CR,LF,0 TEXT6: DB CR,LF,'RAM RAM' DB CR,LF,'ADDR DATA' DB CR,LF,'-----------------------------' DB CR,LF,0 ;****************************************** ;**** END OF PROGRAM ************ ;****************************************** END
  5. Помогите с ADuC 831

    Привет знатоки, Привет Коля, Извините но новие проблеми возникнули. прочитал в даташете но не понял как директно поменят ети регистри. Попробую склеит здес фотки с даташита. Моа просьба - помогите с какоѝ-то пример на асемблере как пишется в регистрам. Спосибо предварительхо за помощ.
  6. Помогите с ADuC 831

    Спосибо тебе Kolia, твоя помощ неоценимая, вот и моѝ проблем разрешен думаю. Спосибо еще раз!!!
  7. Помогите с ADuC 831

    Нужно сделать комуникацию через I2C меж ADuC 831 и RTC ( DS1307 ), но не понимаю как дефинировать порти в асемблерском фаѝле. В даташете контролера указано что пин 26 - SCLOCK и пин 27 - SDATA/MOSI , но когда дефинирую ети пини как порти дает ошибка и не возпринимает SCLOCK и SDATA как порти. Помогите пожалуѝста и скажите где моя ошибка. п.п. извините за правопис, но на етоѝ кирилицоѝ не имею ни "ериѝ" ни " е оборотное"
×
×
  • Создать...