Sari la conținut
ELFORUM - Forumul electronistilor

Un PIC de teorie şi un PIC de practică


NumLock

Postări Recomandate

Nimic nu e gratis.

Din p?cate e groaznic de adev?rat. Orice solu?ie e un compromis, dar ca vitez? de execu?ie asta e cea mai rapid?. Eu am avut nevoie de un sinus extrem de precis, din Hz în Hz, începînd de la 0 pîn? la 200Hz, realizat din 256 de e?antioane ?i eram limitat groaznic de timp, sistemul trebuind s? mai fac? o gr?mad? de alte porc?rii. Nici nu mai vreau s?-mi aduc aminte de ce probleme de jitter am avut ?i cum mi-am stors creierii încercînd s? g?sesc gre?elile din cod f?r? debugger, doar cu un am?rît de osciloscop. Detest programarea.:41
Link spre comentariu
  • Răspunsuri 19
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • NumLock

    10

  • cirip

    3

  • ratza

    2

  • Liviu M

    1

Top autori în acest subiect

Îmi spui acum cum fac asta recursiv (cu detalii) :)?

Ar fi fost politicos sa bagi si un "te rog" , dar hai sa zicem ...
Îmi cer scuze, m? gr?beam ?i am uitat ?i cuvintele magice :jytuiyu . Merci de informa?ii (?i ?ie ?i lui @ratza) :) . O s? încerc algoritmul în Excel a?a cum ai zis.
Link spre comentariu
  • 2 săptămâni mai târziu...

Salut,

 

Am nevoie de pu?in ajutor ?i de explica?ii. Nu ?tiu dac? am 'tradus' corect codul din acest document PDF, pentru conectarea unui microcontroler PIC la un MT8880/CM8880 (PIC Program I Listing: DTMF Dialing).

 

Cred c? nu am în?eles 100% ace?ti pa?i:

 

(1) Put the data pins into output mode - movlw 0; movwf TRISA

(2) Write the data to the bus - scriu în primul nybble al PORTB un numar

(3) Set up RS0: 0 = write data; 1 = write instructions - ?

(4) Clear the RW bit to request a write - bcf PORTB, 5

(5) Clear CS to activate the CM8880 - bcf PORTB, 6

(6) Set CS to terminate the write operation and deactivate the CM8880 -bsf PORTB, 6

generate:		bsf	STATUS,  RP0		movlw	.255			; All bits high to deselect MT8880		movwf	TRISB		movlw	talk			; Set port to output		movwf	TRISB		call 	        delay			; Wait for things to settle down		movlw	dials			; Set control register for dialing		movwf	cntrl			call 	        set_controls 	; Write settings to control registers		clrf	        digit			; Clear the digit counter to 0				movf	digit,  W		        ; Now, put the digit number into W                                                       		call	dial_digit			; Dial the digit stored in W		hold:		bsf	STATUS,  RP0		; Select Bank1		movlw	listen		movwf	TRISB			; Set port to input		call	get_status		bsf	STATUS,  RP0		btfss	stats,  xm_rdy		; If transmitter's not ready, wait here		goto	hold		movlw	talk			; Restore port to output.		movwf	TRISB		goto	 generate		; Generates a brief delay to allow MT8880 to get settled after power-on.delay: 		movlw	.64		movwf	temploop		nopdecfsz	temp,  f			; Loop 257 times		goto	loop		return				; Return; Accepts data to be written to the pair of four-bit control registers in; the variable "cntrl." Data for register 1 must be in the lower nybble;; register 2 in the upper nybble.set_controls:		movf		cntrl,  W		; Get the control value				andlw		b'00001111' 	; Strip upper four bits			iorlw		b'00011000'	        ; Set register-select, clear CS, set RS2.		movwf	PORTB		; Write to output, (CS low).		bsf		PORTB,  CS	        ; Deselect to complete the 1st write.				swapf		cntrl,	W	        ; Get nybble-swapped control value.		andlw		b'00001111' 	; Strip upper four bits		iorlw		b'00010000' 	; Set register-select, clear CS.		movwf	PORTB	        ; Write to output, (CS low).		bsf		PORTB,  CS	        ; Deselect to complete the 2nd write.		return; Dials a DTMF digit represented by the lower four bits of the; W register. Converts a value of "0" to "10" in accordance with; the DTMF encoding scheme.dial_digit:		andlw		.15		; Strip MSB, update z flag in the process		movf		W,	1	; If w=0, change it to 10 for proper..		btfss		STATUS,  Z	; ..DTMF encoding		movlw	.10							movwf	PORTB		; Write to output		BSF		PORTB,   CS	; Terminate the write		return		; Gets the contents of the MT8880's status register and stores 'em; to the variable "stats." The port TRIS (data direction) must; be set to input before calling this routine.get_status:		bcf		STATUS,	 RP0		; Select Bank0		bsf		PORTB,  	 RW		; Set to read		bsf		PORTB,	 RS		; Select the status register		bcf    	PORTB, 	 CS		; Activate chip				movlw	.15			        ; Bit mask for 4-bit data		movlw	stats					movf		stats,	 W					andlw		PORTB			; Get lower 4 lsbs of rb (data)					bsf		PORTB,  CS		        ; Deselect chip		return
Numa bine.
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări