Trích:
Nguyên văn bởi mgdaubo
Em có vài thắc mắc(mới học PIC được 1 buổi tối):
1/Em thấy pic16F877a PORTA chỉ có từ RA0-->RA4, em muốn dùng hết 8bit PORTA thì dùng chân nào nữa? có phải AN5-->AN7 ko?
2/Em đang viết chương trình chạy 1 dãy led (32led),chương trình thế này: có nhiều mode chạy led, khi bắt đầu thì chọn ngẫu nhiên 1 mode chạy, trong quá trình chạy nếu nhấn reset MRST thì pic reset lại và nó lại chọn ngẫu nhiên 1 mode khác... viết bằng ASM.
Nhưng hiện em đang bí phần tạo số ngẫu nhiên, xin hỏi ASM cho pic có cách nào tạo được số ngẫu nhiên ko? nếu dùng C thì sao?
3/Anh nào viết 1 tut về sử dụng chức năng Analog của portA đi
|
1/ PIC16F877A được thiết kế PORTA như vậy, không có các chân RA6 và RA7. Các bit 6 và 7 không được sử dụng trong các thanh ghi PORTA và TRISA. Do đó bạn không thể dùng PORTA như một port 8-bit, bạn chỉ có thể dùng nó như một port 6-bit.
2/ Ở
www.piclist.com có các đoạn code hợp ngữ để tạo số ngẫu nhiên, trang sau đây có các đoạn code để tạo số ngẫu nhiên 8-bit:
http://www.piclist.com/techref/microchip/rand8bit.htm
Các trình biên dịch C thường có hàm sinh số ngẫu nhiên, nếu viết chương trình bằng C thì chỉ cần dùng hàm đó.
3/ Dưới đây là các bước thực hiện để sử dụng module A/D (được dịch và chú thích thêm từ datasheet của PIC16F877A)
Trích:
1. Cấu hình module A/D
- Cấu hình các chân analog/điện áp chuẩn (tham chiếu) và các chân digital (dùng thanh ghi ADCON1)
- Chọn kênh ngõ vào A/D (thanh ghi ADCON0)
- Chọn nguồn xung chuyển đổi A/D (thanh ghi ADCON0)
- Bật module A/D (thanh ghi ADCON0)
2. Cấu hình ngắt A/D (nếu cần)
- Xóa bit ADIF (thanh ghi PIR1)
- Bật bit ADIE (thanh ghi PIE1)
- Bật bit PEIE (thanh ghi INTCON)
- Bật bit GIE (thanh ghi INTCON)
3. Chờ đủ thời gian lấy mẫu
4. Bắt đầu chuyển đổi: bật bit GO/DONE (thanh ghi ADCON0)
5. Chờ cho việc chuyển đổi hoàn tất bằng 1 trong 2 cách sau:
- Hỏi vòng bit GO/DONE để phát hiện nó bị xóa (đã cấm ngắt)
- Chờ ngắt A/D
6. Đọc cặp thanh ghi kết quả (ADRESH:ADRESL), xóa bit ADIF nếu cần
7. Với phép chuyển đổi tiếp theo, quay trở về bước 1 hay 2 tùy trường hợp.
TAD là thời gian chuyển đổi 1 bit.
|
Datasheet của PIC16F877A đã giải thích chi tiết về các thanh ghi liên quan đến module A/D. Bạn hãy đọc những phần đó.
Nếu cần thiết, bạn có thể tự viết đoạn code và post lên đây để các thành viên khác có thể xem xét giúp bạn.
Thân,