PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 08-01-2008, 11:51 PM   #361
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Bạn tự nêu cách giải quyết rồi đó. Dùng một biến chuỗi để lưu chuỗi kết quả, mỗi lần thêm vào chuỗi thì dùng hàm nối chuỗi để nối chuỗi đã có và ký tự cần thêm. Bạn xem tài liệu hướng dẫn của CCS C về các hàm này.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 09-01-2008, 01:59 PM   #362
picthanh
Đệ tử 2 túi
 
Tham gia ngày: Jun 2007
Bài gửi: 44
:
cộng ký tự thành chuỗi

với cách viết mà em post ở bài trước thì nó chỉ hiện được phím đầu tiên mà mình nhấn thôi,còn các phím sau đó thì LCD chỉ hiện lên các ký tự lạ thôi.

Còn hàm nối chuỗi mà Bác nói là hàm nào ,có phải là hàm "srcat(key,string1);"này ko?
em cũng thử rồi nhưng ko được nên phải cầu cứu các Bác nè.

Code:
#include "D:\PIC PROGRAM\dk.h"
#include <KBD.C>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <lcd.c>
char string1[10];
char i,t, keyscan;
char k,key[10];

void main()
{

   port_b_pullups(TRUE);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   kbd_init();
   lcd_init();
SET_TRIS_C( 0x00 );
output_bit(PIN_C4, 1);output_bit(PIN_C5, 1);
delay_ms(1000);
output_bit(PIN_C4, 0);output_bit(PIN_C5, 0);

i=0;
lcd_putc('\f'); 
while(1)
   {
      k = kbd_getc();
      if (k!=0)
         {
         strcpy(string1,k);
         strcat(key,string1);
       for(i=0;i<strlen(key);i++)
         lcd_putc(key[i]);
         }
     }
}
với chương trình này thì LCD hiện những ký tự lạ có cả tiếng Nhật nửa.nói chung là nó ko chạy đúng theo những gì mà em cần
có Bác nào đã làm cái này chưa chỉ em với.

thay đổi nội dung bởi: namqn, 09-01-2008 lúc 06:09 PM.
picthanh vẫn chưa có mặt trong diễn đàn  
Old 09-01-2008, 08:07 PM   #363
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Tôi không rõ CCS C sẽ xử lý thế nào khi bạn dùng lệnh k = kbd_getc();. Vì bạn đã khai báo k là một mảng ký tự (tối đa 10 ký tự), trong khi prototype của kbd_getc() lại cho thấy giá trị trả về là 1 ký tự. Bạn thử lại với lệnh sau xem sao:

Code:
	k[0] = kbd_getc();
Đúng là tôi đã đề cập đến hàm strcat(). Cần biết là tôi không sử dụng CCS C, chỉ đọc tài liệu hướng dẫn của phần mềm để giúp bạn. Do đó, bạn sẽ là người thử nghiệm các giải pháp mà tôi cho là sẽ giúp ích cho bạn.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 10-01-2008, 12:37 AM   #364
nod32
Nhập môn đệ tử
 
Tham gia ngày: Dec 2007
Bài gửi: 3
:
Tôi đang học CCS chưa biết sử dụng nhiều Huynh có thể post thêm bai hướng dẫn hay tài liệu được không?
nod32 vẫn chưa có mặt trong diễn đàn  
Old 10-01-2008, 01:04 AM   #365
picthanh
Đệ tử 2 túi
 
Tham gia ngày: Jun 2007
Bài gửi: 44
:
Bác "nampn" oi!em khai báo "k" là biến kiểu char bình thường mà, còn biến "key" mới là biến kiểu mảng "char k,key[10]". em sẽ thử cách này của Bác thử xem sao. Cảm ơn Bác rất nhiều.
picthanh vẫn chưa có mặt trong diễn đàn  
Old 10-01-2008, 01:21 AM   #366
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi picthanh View Post
Bác "nampn" oi!em khai báo "k" là biến kiểu char bình thường mà, còn biến "key" mới là biến kiểu mảng "char k,key[10]". em sẽ thử cách này của Bác thử xem sao. Cảm ơn Bác rất nhiều.
Vâng, tôi nhầm, bạn đã khai báo k là char. Nhưng khi đó hàm strcpy() lại có khả năng chạy sai, vì nó cần 2 đối số kiểu string.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 14-01-2008, 11:47 AM   #367
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
giúp mình với!!!!!!
mình cũng đang gặp phải lỗi này. chương trình của mình sử dụng ngắt RB và timer0. hàm phục vụ ngắt RB của mình có gọi đến khá nhiều hàm con. khi mình bỏ hẳn hàm phục vụ ngắt RB ra khỏi ct thì hoạt động của timer0 là đúng. còn khi mình thêm vào hàm phục vụ ngắt RB,mặc dù ngắt RB không hề sảy ra nhưng timer0 của mình vẫn chạy không chính xác.
cho mình hỏi bạn khangcodt đã khắc phục được lỗi timer chạy sai khi trong hàm phục vụ ngắt gọi đến các hàm con khác chưa vậy?
mình cảm ơn nha.
bean984 vẫn chưa có mặt trong diễn đàn  
Old 14-01-2008, 01:55 PM   #368
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
cho mình hỏi thêm câu nữa nhé.
mình dùng hàm printf(); để truyền dl qua máy tính.
1) làm thế nào để biết pic đã truyền xong mảng ký tự
2) để truyền một số nguyên mình đã thực hiện như sau:
itoa(trunggian2,10,s);//chuyển số nguyên thành mảng ký tự
printf(s);
trong đó biến trunggian2 là int16, s là mảng char. nhưng khi mình thử test với hyper terminal thì kết quả nhận được lại không đúng. cụ thể là sau những số nhận được lại có thêm các ký tự lạ.
bạn nào đã làm về vấn đề này rồi xin chỉ giúp mình với
mình cảm ơn nhiều.
bean984 vẫn chưa có mặt trong diễn đàn  
Old 15-01-2008, 02:02 PM   #369
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
cho mình hỏi :
khi truyền một mảng char từ pic lên máy tính thì ngắt RDA sảy ra sau khi truyền xong cả mảng hay cứ mỗi lần truyền xong một phần tử thì xảy ra ngắt RDA?
mình cảm ơn!
bean984 vẫn chưa có mặt trong diễn đàn  
Old 15-01-2008, 08:17 PM   #370
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi bean984 View Post
cho mình hỏi :
khi truyền một mảng char từ pic lên máy tính thì ngắt RDA sảy ra sau khi truyền xong cả mảng hay cứ mỗi lần truyền xong một phần tử thì xảy ra ngắt RDA?
mình cảm ơn!
Ngắt INT_RDA xảy ra khi PIC nhận được dữ liệu tại cổng USART của nó (ví dụ do máy tính truyền đến), còn ngắt INT_TBE xảy ra khi PIC truyền dữ liệu qua cổng USART của nó (ví dụ truyền đến máy tính). Câu hỏi của bạn thuộc loại 'râu ông nọ cắm cằm bà kia'.

Ngắt INT_RDA xảy ra mỗi khi PIC16F877A nhận được 1 ký tự ở bộ đệm nhận, người dùng nên nhanh chóng đọc dữ liệu từ bộ đệm để PIC có thể ghi ký tự kế tiếp ngay khi thanh ghi dịch đã có đủ dữ liệu.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 16-01-2008, 08:56 AM   #371
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
em cảm ơn anh namqn nhiều.
cho em hỏi thêm câu này nữa nhé
em dùng con 16f877a để nhận mảng ký tự truyền từ môt con 16f877a khác. mảng ký tự kết thúc bằng ký tự @.
bên phát:
itoa(x,10,s);// s khai báo là char s[5]
s[4]='@';// vì e k biết s kết thúc bằng ký tự gì
printf(s);
bên thu em thực hiện truyền vài lần(thay đổi giá trị của x bằng cách ấn nút) thì e chỉ nhận được lần đầu tiên. truyền các lần tiếp theo thì nó bị đơ luôn, không chạy nữa. e chạy mô phỏng bằng proteus.
đây là code bên phía nhận
Code:
#INT_RDA
RECEIVER()
{
   char kt;
   int i;
   char s1[4];
   i=0;
   kt=fgetc(pc);

   while(kt!='@')
      {
         s1[i]=kt;
         i++;
         kt=fgetc(pc);
      }
         
         lcd_clear();
         delay_ms(1);
         lcd_display_str(0, 0, s1);
}

thay đổi nội dung bởi: bean984, 17-01-2008 lúc 08:25 AM.
bean984 vẫn chưa có mặt trong diễn đàn  
Old 16-01-2008, 03:17 PM   #372
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
cho mình hỏi một câu nữa
khi ngắt RDA xảy ra thì cờ nào được set lên 1, và khi kết thúc ngăt nó có tự động xóa bít đó không?
bean984 vẫn chưa có mặt trong diễn đàn  
Old 16-01-2008, 06:04 PM   #373
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi bean984 View Post
cho mình hỏi một câu nữa
khi ngắt RDA xảy ra thì cờ nào được set lên 1, và khi kết thúc ngăt nó có tự động xóa bít đó không?
Ngắt RDA xảy ra khi cờ RCIF trong thanh ghi PIR1 được set, bạn có thể coi giản đồ thời gian trong datasheet trang 120.

Trích:
em cảm ơn anh namqn nhiều.
cho em hỏi thêm câu này nữa nhé
em dùng con 16f877a để nhận mảng ký tự truyền từ môt con 16f877a khác. mảng ký tự kết thúc bằng ký tự @.
bên phát:
itoa(x,10,s);// s khai báo là char s[5]
s[4]='@';// vì e k biết s kết thúc bằng ký tự gì
printf(s);
Bạn xem lại mẫu hàm của hàm printf, muốn gửi 1 chuỗi bạn phải gọi như sau
Code:
printf("%s", s);
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn  
Old 18-01-2008, 02:22 PM   #374
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
cho mình hỏi cái này nhé
nếu dùng lệnh printf("%s", s); thì ký tự kết thúc của chuỗi s là gì?
mình định dùng ký tự này để xử lý việc nhận chuỗi s. có phải ký null không nhỉ?
bean984 vẫn chưa có mặt trong diễn đàn  
Old 18-01-2008, 11:47 PM   #375
nguyendinhtuan
Đệ tử 6 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 127
:
các chương trình ví dụ
File Kèm Theo
File Type: pdf CCS PICC PIC16F87X Tutorial by Example.pdf (128.8 KB, 1499 lần tải)
nguyendinhtuan vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
TUT về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
Lập nhóm PIC16F877A nhh Cơ bản về vi điều khiển và PIC 285 08-03-2017 11:08 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
Pic16f877a TỪ DỄ TỚi KhÓ ntc Cơ bản về vi điều khiển và PIC 373 23-05-2009 10:24 PM


Múi giờ GMT. Hiện tại là 12:04 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam